java中的多态和继承---"编译看左边,运行看右边"(多态执行)
来源:互联网 发布:好看的桌面壁纸 知乎 编辑:程序博客网 时间:2024/06/06 08:14
老毕的"编译看左边,运行看右边"(多态执行)
(对面向对象语言中理解多态、继承很有帮助~~~)
老毕在讲到多态执行问题时,结合下面的例子,给我们总结了一套口诀:“成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”意思是:当父类变量引用子类对象时(Fu f = new Zi();
),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。
例:
class Fu {
intnum = 5;
static void method4() {
System.out.println("fu method_4");
}
void method3() {
System.out.println("fu method_3");
}
}
class Zi extends Fu {
intnum = 8;
static void method4() {
System.out.println("zi method_4");
}
void method3() {
System.out.println("zi method_3");
}
}
class DuoTaiDemo4 {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);//与父类一致
f.method4();//与父类一致
f.method3();//编译时与父类一致,运行时与子类一致
Ziz = new Zi();
System.out.println(z.num);
z.method4();
z.method3();
}
}
输出结果:
5
fu method_4
zi method_3
8
zi method_4
zi method_3
个人分析:
Fu f = new Zi();----------首先了解变量F到底是什么,把这句子分2段:Fu f;这是声明一个变量f为Fu这个类,那么知道了f肯定是Fu类。然后我们f=newZi();中建立一个子类对象赋值给了f,结果是什么??
结果是,拥有了被Zi类函数覆盖后的Fu类对象----f------。
-------------------------------------------也就是说:
只有子类的函数覆盖了父类的函数这一个变化,但是f肯定是Fu这个类,也就是说f不可能变成其他比如Zi这个类等等(突然f拥有了Zi类特有函数,成员变量等都是不可能的)。所以f所代表的是函数被复写后(多态的意义)的一个Fu类,而Fu类原来有的成员变量(不是成员函数不可能被复写)没有任何变化----------------获得结论:A:成员变量:编译和运行都看Fu。
但是f的Fu类函数被复写了。--------------获得结论:B:非静态方法:编译看Fu,运行看Zi
对于静态方法:编译和运行都看Fu!!
其实很简单,首先我们要理解静态情况下发生了什么?
----------------当静态时,Fu类的所有函数跟随Fu类加载而加载了。也就是Fu类的函数(是先于对象建立之前就存在了,无法被后出现的Zi类对象所复写的,所以没发生复写,那么获得:C:静态方法:编译和运行都看Fu。
- java中的多态和继承---"编译看左边,运行看右边"(多态执行)
- java中的多态和继承---"编译看左边,运行看右边"(多态执行)
- JAVA继承:编译与运行的关系(编译看左边,运行看右边)
- 多态——"编译看左边,运行看右边"
- jvm视角看java继承和多态
- 新手看Java中的多态
- 实例看继承与多态
- 你看着左边,天堂在你右边
- 黑马--程序员 总结:多态变量,在编译和运行期间,都参考的是左边(引用类型所属的类)
- 多角度看 Java 中的泛型
- 多角度看 Java 中的泛型
- 多角度看 Java 中的泛型
- 多角度看 Java 中的泛型
- Java中的继承和多态
- Java中的继承和多态
- Java中的继承和多态
- java语言中的继承和多态
- Java中的继承和多态
- 企业软件,WEB和对于他们无限美好的遐想(第六日)--2014-3-15--月日 + Struts 原理分析 (五)
- C++第10周项目1参考——利用循环求和 【项目2-分数的累加】
- javascript复习笔记二----自动转型函数
- hdu 1059&&POJ 1014 Dividing
- 联想Y480安装一键恢复
- java中的多态和继承---"编译看左边,运行看右边"(多态执行)
- 关于521_ny_975(贪心算法).java
- 输入流和输出流及其转换笔记1
- 深入学习struts2
- 读《颠覆医疗》
- 教官,就让他重新考核一次吧
- linux下使用yum安装配置samba
- 开源复杂网络分析软件中社团发现算法总结
- 打开 Windows 防火墙以允许 SQL Server 访问