JAVA语法:子类成员覆盖父类成员时的现象
2012-01-21 00:53
295 查看
1.重温JAVA语法:如父类Father与子类Son:
输出结果为:
由此可见,当子类与父类具有同样的成员属性(public)与方法(public)时,父类变量引用子类对象时,
a.父类变量调用成员属性时,子类成员属性不会覆盖父类成员属性,不具动态性;
b.父类变量调用方法时,子类方法将会覆盖父类方法,具有动态性。
为何会如此,目前不明白,还请知道的朋友赐教。
class Son extends Father{ public String name = "son"; public void say(){ System.out.println("i am " + this.name); } public static void main(String[] args){ Father f = new Father(); System.out.println("Father f = new Father() : f.name => " + f.name); System.out.print("Father f = new Father() : f.say() => "); f.say(); Father fa = new Son(); System.out.println("Father fa = new Son() : fa.name => " + fa.name); System.out.print("Father fa = new Son() : fa.say() => "); fa.say(); Son son = new Son(); System.out.println("Son son = new Son() : son.name => " + son.name); System.out.print("Son son = new Son() : son.say() => "); son.say(); } }
输出结果为:
Father f = new Father() : f.name => father Father f = new Father() : f.say() => i am father Father fa = new Son() : fa.name => father Father fa = new Son() : fa.say() => i am son Son son = new Son() : son.name => son Son son = new Son() : son.say() => i am son
由此可见,当子类与父类具有同样的成员属性(public)与方法(public)时,父类变量引用子类对象时,
a.父类变量调用成员属性时,子类成员属性不会覆盖父类成员属性,不具动态性;
b.父类变量调用方法时,子类方法将会覆盖父类方法,具有动态性。
为何会如此,目前不明白,还请知道的朋友赐教。
相关文章推荐
- JAVA: 子类“覆盖”父类的成员变量
- java在继承中父类的成员变量是否会被子类所覆盖
- 从父类构造器调用子类覆盖方法看Java初始化过程
- Java多态 实例子类自动调用父类为空的构造方法 成员变量不支持Override 可写,没多态效果
- java中子类与父类的同名变量覆盖问题
- Java中关于子类成员变量与父类成员变量同名
- 有关java中子类覆盖父类的方法的返回值的问题
- java方法重载和覆盖、子类与父类的转换
- java中 静态成员、实例成员、构造方法在子类和父类中的执行顺序
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- Java关于子类对父类私有方法覆盖的问题
- Java基础之子类父类属性覆盖
- java中子类继承了父类的哪些成员
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- java中子类覆盖父类方法所必须满足的条件
- java子类成员变量与父类重名问题解释
- Java中关于子类覆盖父类的抛出异常问题
- 继承 子类对父类成员变量的覆盖
- [Java] 继承中,父类被覆盖的成员变量、方法的可访问性
- Java 子类继承父类方法的重写(或者覆盖,override)