java 父类引用指向子类对象---动态绑定之易错点详解
2016-11-22 16:56
501 查看
知识点:
1、java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法;
2、父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private、非 final 方法),那么这个对象调用该方法时默认调用的时子类重写的方法,而不是父类的方法;
3、对于java当中的方法而言,除了final,static,private 修饰的方法和构造方法是前期绑定外,其他的方法全部为动态绑定;(编译看左边,运行看右边)
本质:java当中的向上转型或者说多态是借助于动态绑定实现的,所以理解了动态绑定,也就搞定了向上转型和多态。
实例演示:
运行结果:
分析:
1、父类引用指向子类对象,对象调用的方法如果已经被子类重写过了则调用的是子类中重写的方法,而不是父类中的方法;
2、父类引用指向子类对象,如果想要调用子类中和父类同名的成员变量,则必须通过getter方法或者setter方法;
3、父类引用指向子类对象,如果想调用子类中和父类同名的静态方法,直接子类“类名点” 操作获取,不要通过对象获取;
4、父类引用指向子类对象的两种写法:(第二种得了解,面试中可能用到)
1、java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法;
2、父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private、非 final 方法),那么这个对象调用该方法时默认调用的时子类重写的方法,而不是父类的方法;
3、对于java当中的方法而言,除了final,static,private 修饰的方法和构造方法是前期绑定外,其他的方法全部为动态绑定;(编译看左边,运行看右边)
本质:java当中的向上转型或者说多态是借助于动态绑定实现的,所以理解了动态绑定,也就搞定了向上转型和多态。
实例演示:
package practice_19; public class AlibabaMain01 { public static void main(String[] args) { System.out.println("--------父类引用指向子类对象-----------"); Father instance = new Son(); instance.printValue(); instance.printValue2(); System.out.println(instance.name); instance.printValue3(); System.out.println("----------创建子类对象------------"); Son son = new Son(); son.printValue(); son.printValue2(); System.out.println(son.name); son.printValue3(); System.out.println("---------创建父类对象-----------"); Father father = new Father(); father.printValue(); father.printValue2(); System.out.println(father.name); father.printValue3(); } } class Father { public String name = "father"; public void printValue() { System.out.println("this is father's printValue() method.---"+this.name); } public void printValue2(){ System.out.println("this is father's printValue2() method.---"+this.name); } public static void printValue3(){ System.out.println("this is father's static printValue3() method."); } } class Son extends Father { public String name = "Son"; public void printValue() { System.out.println("this is Son's printValue() method.---"+this.name); } public static void printValue3(){ System.out.println("this is Son's static printValue3() method."); } }
运行结果:
--------父类引用指向子类对象----------- this is Son's printValue() method.---Son this is father's printValue2() method.---father father this is father's static printValue3() method. ----------创建子类对象------------ this is Son's printValue() method.---Son this is father's printValue2() method.---father Son this is Son's static printValue3() method. ---------创建父类对象----------- this is father's printValue() method.---father this is father's printValue2() method.---father father this is father's static printValue3() method.
分析:
1、父类引用指向子类对象,对象调用的方法如果已经被子类重写过了则调用的是子类中重写的方法,而不是父类中的方法;
2、父类引用指向子类对象,如果想要调用子类中和父类同名的成员变量,则必须通过getter方法或者setter方法;
3、父类引用指向子类对象,如果想调用子类中和父类同名的静态方法,直接子类“类名点” 操作获取,不要通过对象获取;
4、父类引用指向子类对象的两种写法:(第二种得了解,面试中可能用到)
// 1、第一种常规写法 Father instance = new Son(); // 2、第二种变形写法; Son son = new Son(); Father mson = (Father) son;
相关文章推荐
- Java父类引用指向子类对象静态绑定和动态绑定问题
- 父类引用指向子类对象(Java中的多态)
- Java多态--父类引用指向子类对象
- java多态,如何理解父类引用指向子类对象
- 黑马程序员_Java多态性详解——父类引用子类对象
- Java 父类引用指向子类对象
- 关于java基础中,接口里面父类的对象指向子类的引用
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象
- java中父类对象引用指向子类对象
- 【java0002】父类引用指向子类对象
- Java多态性详解——父类引用子类对象
- 多态的三个条件: 1、要有继承 2、要有重写 3、父类引用指向子类对象----java
- Java父类引用指向子类对象
- Java多态性详解——父类引用子类对象-理解-1
- Java多态性详解——父类引用子类对象
- Java多态性详解 (父类引用子类对象)
- java多态性详解——父类引用子类对象
- Java多态性详解——父类引用子类对象
- Java多态性详解——父类引用子类对象-2
- 关于java基础中,接口里面父类的对象指向子类的引用