面向对象--多态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







原创粉丝点击