class A
{
int i=10;
static void show()
{
System.out.println("show() in A");
} void show1()
{
System.out.println("show1() in A");
}
}
class B extends A
{
static int i=20;
static void show()
{
System.out.println("show() in B ");
}
}class C extends A
{
int i=30;
void show1()
{
System.out.println("show1() in c");
}}class TestStatic
{
public static void main(String[] args)
{
A aa=new B();
A ab=new C();
aa.show();
aa.show1(); //1
ab.show();
ab.show1(); //2
}
}
我想问的是:1:为什么静态方法只能够覆盖静态方法,非静态只能覆盖非静态方法?而成员变量却可以用静态覆盖非静态,非静态覆盖静态的?
2:当两个类为is-a的关系的时候,调用静态方法的时候,为什么1处和2处的结果会不一样?
{
int i=10;
static void show()
{
System.out.println("show() in A");
} void show1()
{
System.out.println("show1() in A");
}
}
class B extends A
{
static int i=20;
static void show()
{
System.out.println("show() in B ");
}
}class C extends A
{
int i=30;
void show1()
{
System.out.println("show1() in c");
}}class TestStatic
{
public static void main(String[] args)
{
A aa=new B();
A ab=new C();
aa.show();
aa.show1(); //1
ab.show();
ab.show1(); //2
}
}
我想问的是:1:为什么静态方法只能够覆盖静态方法,非静态只能覆盖非静态方法?而成员变量却可以用静态覆盖非静态,非静态覆盖静态的?
2:当两个类为is-a的关系的时候,调用静态方法的时候,为什么1处和2处的结果会不一样?
{
int i=10;
static void show()
{
System.out.println("show() in A");
} void show1()
{
System.out.println("show1() in A");
}
}
两个方法输出内容都一样.是不是这个在做怪.
class TestStatic//把楼主的主类改成这样,你运行看看是不是被重写了.
{
public static void main(String[] args)
{
A aa=new B();
A ab=new C();
B.show();
aa.show1(); //1
C.show();
ab.show1(); //2
}
}
2:当两个类为is-a的关系的时候,调用静态方法的时候,为什么1处和2处的结果会不一样?
事先说明一下你并没有调用静态方法。
支持一楼
aa.show1(); //1继承了A中的方法
ab.show1(); //2执行时动态绑定C中的覆盖了A中的show1()方法。
class A
{
int i=10;
static int j =10;
static int n=11;
static void show()
{
System.out.println("show() in A");
} void show1()
{
System.out.println("show1() in A");
}
}
class B extends A
{
static int i=20;
static void show()
{
System.out.println("show() in B ");
}
} class C extends A
{
int i=30;
int j=2;
static int n=23;
void show1()
{
System.out.println("show1() in c");
} } public class Test3
{
public static void main(String[] args)
{
A aa=new B();
A ab=new C();
C cc=new C();
aa.show(); //A类的方法
aa.show1(); //A类的方法
ab.show();//A类的方法
System.out.println(cc.n);//可以看出static变量n被被隐藏了
System.out.println(ab.n);//可以看出static变量j并没有被隐藏
System.out.println(ab.j);//可以看出static变量j并没有被隐藏
ab.show1(); //2执行时调用C类的方法
}
}
比如说
A a = new B(); a.test();//假如test是静态方法!
静态方法是类的信息不是对象的信息,简单明了说,静态方法是静态绑定,就是编译期判断它将执行哪个方法,非静态方法是动态绑定,执行期盼段执行哪个方法!
{
static void show()
{
System.out.println("show() in A");
} }
class B extends A
{
static void show()
{
System.out.println("show() in B ");
}
}这究竟算不算覆盖!