面向对象--多态2
来源:互联网 发布:淘宝直通车定时投放 编辑:程序博客网 时间:2024/06/06 07:26
下面是一个普通继承的代码及调用:
public class Demo46 {public static void main(String[] args){Zi zi=new Zi();zi.method1();zi.method2();zi.method3();}}class Fu{void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}}class Zi extends Fu{void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}}运行结果:
zi method_1
fu method_2
zi method_3
在多态中非静态成员函数的特点:
在编译时期,参阅引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没有,编译失败。
在运行时期,参阅对象所属类中是否有调用方法。
public class Demo46 {public static void main(String[] args){//Zi zi=new Zi();//zi.method1();//zi.method2();//zi.method3();Fu fu=new Zi();fu.method1();fu.method2();运行结果是:fu.method3();//在编译时期,参阅引用变量所属的类中没有method3的调用方法,故会编译失败。}}class Fu{void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}}class Zi extends Fu{void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}}Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method method3() is undefined for the type Fu
at com.basic.Demo46.main(Demo46.java:12)正确的代码是:
public static void main(String[] args){//Zi zi=new Zi();//zi.method1();//zi.method2();//zi.method3();Fu fu=new Zi();fu.method1();fu.method2();}}class Fu{void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}}class Zi extends Fu{void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}}
运行结果为:
zi method_1
fu method_2
总结:非静态成员函数在多态调用时,编译看左边,运行看右边。也即是对于 Fu f=new Zi();来说,编译的时候看Fu类中是否有调用的成员函数,若有,编译通过,没有,编译失败,在运行的时候,看Zi类中的调用的函数。
在多态中静态成员函数的特点:
无论编译还是运行,都参考左边(引用型变量所属的类)
public class Demo46 {public static void main(String[] args){Fu fu=new Zi();fu.method4();Zi zi=new Zi();zi.method4();}}class Fu{int num=6;void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}static void method4(){System.out.println("fu method_4");}}class Zi extends Fu{int num=9;void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}static void method4(){System.out.println("zi method_4");}}运行结果为:
fu method_4
zi method_4
在多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
public class Demo46 {public static void main(String[] args){Fu fu=new Zi();System.out.println(fu.num);Zi zi=new Zi();System.out.println(zi.num);}}class Fu{int num=6;void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}}class Zi extends Fu{int num=9;void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}}运行结果为:
6
9
阅读全文
0 0
- 面向对象--多态2
- 黑马程序员->面向对象 (2 -多态,异常
- Java笔记2 面向对象<4>多态、
- 面向对象——(2)多态
- 面向对象基础2:多态.抽象类
- 面向对象—多态(2)
- 05-面向对象(多态-转型)1 05-面向对象(多态-转型)2 05-面向对象(多态-转型)3 05-面向对象(多态-转型)4
- 面向对象(1)---多态
- 面向对象 -- 多态
- 面向对象--多态
- 面向对象_03_多态
- javaSE-面向对象-多态
- 面向对象-多态
- 面向对象-多态
- 面向对象--多态
- 面向对象-多态
- 面向对象--多态
- 17 面向对象 多态
- 探索深入理解java虚拟机之垃圾收集(4)
- 2017.11.16号工作笔记
- 由于外键不建索引引起的锁
- float与double的范围和精度
- mysql 获取本周五到上周四的数据 SUBDATE() DATE_FORMAT()
- 面向对象--多态2
- How many fix bug method do you have?
- git在push时候出现timeout的解决方法
- unity使用easy ar制作ar红包
- js实现调用方法(函数)时可动态传入不同参数个数、模拟实现方法(函数)重载
- 【存档】一些好用软件的存档[2017.12.03更新]
- fastdex显著提高编译速度
- PHP菜刀工具WebHandler
- Hadoop 拒绝远程 9000 端口访问