publicclassMain {publicstaticvoid main(String args[])
{
A a=new B();
System.out.println(a.n);//输出1,即A的n值。
}
}
classA
{int n=1;//若注释掉这句,则编译失败.n cannot be resolved or is not a field
}
classBextendsA
{int n=2;//A a=new B(); 跟这个n没关系
}
父类、子类中成员函数名相同时
publicclassM1 {publicstaticvoid main(String[] args) {
C c=new D();
c.run();//输出D
}
}
classC
{void run(){System.out.println("C");}//若没有这句,则编译失败。The method run() is undefined for the type C
}
classDextendsC
{void run(){System.out.println("D");}//这句是C类中run()方法的重写。若没这句,输出C。若有这句,输出D。
}
父类、子类中静态方法名相同时
package 子父类歧义;
publicclassM2 {publicstaticvoid main(String[] args) {
E e=new F();
e.run();//输出E。//有警告:The static method run() from the type E should be accessed in a static way/* 成员函数是动态地绑定到类上。
* 静态函数是静态地绑定到类上。哪个类调用的,就返回哪个类里的方法。如:E.run();
* 静态函数在静态方法区,有别于普通成员函数的重写。
*/
}
}
classE
{staticvoid run(){System.out.println("E");}
}
classFextendsE
{staticvoid run(){System.out.println("F");}
}
父类、子类中变量名相同时public class Main { public static void main(String args[]) { A a=new B(); System.out.println(a.n);//输出1,即A的n值。 }}class A{ int n=1;//若注释掉这句,则编译失败.n cannot