class test_super_sub{
public static void main(String[] args) { B b=new B();
System.out.println("1."+b.i);
System.out.println("2."+b.j); A a=new B();
System.out.println("3."+a.i);
System.out.println("4."+a.j); a.m1();
a.m2(); System.out.println("5."+a.i);
System.out.println("6."+a.j);
}
}
class A{
int i=1;
static int j=3; void m1(){
System.out.println("A.m1()");
i=5;
}
static void m2(){
System.out.println("A.m2()");
j=7;
}
}
class B extends A{
int i=2;
static int j=4;
void m1(){
System.out.println("B.m1()");
i=6;
}
static void m2(){
System.out.println("B.m2()");
j=8;
}
}----------
输出的是:
1.2
2.4
3.1
4.3
B.m1()
A.m2()
5.1
6.7
-----------------------------------------------为什么会输出
B.m1()
A.m2()
5.1
呢?a.m1();到底执行的是哪个方法?谢谢各位!
public static void main(String[] args) { B b=new B();
System.out.println("1."+b.i);
System.out.println("2."+b.j); A a=new B();
System.out.println("3."+a.i);
System.out.println("4."+a.j); a.m1();
a.m2(); System.out.println("5."+a.i);
System.out.println("6."+a.j);
}
}
class A{
int i=1;
static int j=3; void m1(){
System.out.println("A.m1()");
i=5;
}
static void m2(){
System.out.println("A.m2()");
j=7;
}
}
class B extends A{
int i=2;
static int j=4;
void m1(){
System.out.println("B.m1()");
i=6;
}
static void m2(){
System.out.println("B.m2()");
j=8;
}
}----------
输出的是:
1.2
2.4
3.1
4.3
B.m1()
A.m2()
5.1
6.7
-----------------------------------------------为什么会输出
B.m1()
A.m2()
5.1
呢?a.m1();到底执行的是哪个方法?谢谢各位!
a.m1()执行子类方法
a.m2()执行父类方法 ; //因为子类的m2是类方法,而不是对象方法
a.m1()执行子类方法 "那么a.j呢,也是执行子类的属性吗?
你可以尝试将父类的m2方法注释掉,这时编译器会告诉你找不到m2方法因此a.j是执行调用父类的成员j
但是父类的static方法无法被覆盖
a.m1();//执行的子类的m1
a.m2();//执行的父类的m2
System.out.println("2."+b.j);
System.out.println("4."+a.j);
System.out.println("6."+a.j);
改为
System.out.println("2."+B.j);
System.out.println("4."+A.j);
System.out.println("6."+A.j);
就没警告符号了!而且运行结果是一样的!楼主发现没啊??