- JAVA继承在处理成员变量和方法时是有区别的:
1.方法的行为总是表现出它们实际类型的行为;
2.实例变量总是表现出声明这些变量所用类型的行为。 - 如果在子类重写了父类方法,就意味着子类里定义的方法彻底覆盖了父类里的同名方法,系统将不可能把父类里的方法转移到子类中,对于实例变量则不存在这样的现象,即使子类中定义了与父类完全同名的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量。因为继承成员变量和继承方法之间存在这样的差别,所以对于一个引用类型的变量而言,当通过该变量访问它所引用的对象的实例变量时,该实例变量的值取决于声明该变量时类型,当通过该变量来调用它所引用的对象的方法时,该方法行为取决于它所实际引用的对象类型。
- 代码如下:
/** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2010, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ class Base { int count = 2; public void display() { System.out.println(this.count); } } class Derived extends Base { int count = 20; @Override public void display() { System.out.println(this.count); } } public class FieldAndMethodTest { public static void main(String[] args) { // //声明、创建一个Base对象 // Base b = new Base(); // //直接访问count实例变量和通过display访问count实例变量 // System.out.println(b.count); // b.display(); //声明、并创建一个Derived对象 Derived d = new Derived(); //直接访问count实例变量和通过display访问count实例变量 System.out.println(d.count); // d.display(); // //声明一个Base变量,并将Derived对象赋给该变量 // Base bd = new Derived(); // //直接访问count实例变量和通过display访问count实例变量 // System.out.println(bd.count); // bd.display(); // //让d2b变量指向原d变量所指向的Dervied对象 Base d2b = d; //访问d2b所指对象的count实例变量 System.out.println(d2b.count); } }