java---关于多态性

 

 1 package Test;
 2 //1:继承时,子类会隐藏父类相同的方法,要调用父类方法就必须使用super关键字,在子类中可以直接使用父类方法
 3 //2:向上转型时,只保留子类中和父类同名的方法,和父类中其他非同名的方法
 4 
 5 class A {
 6     public String show(D obj) {
 7         return "A and D";
 8     }
 9 
10     public String show(A obj) {
11         return "A and A";
12     }
13 }
14 
15 class B extends A {
16     public String show(B obj) {
17         return "B and B";
18     }
19 
20     public String show(A obj) {
21         return "B and A";
22     }
23 }
24 
25 class C extends B {
26 }
27 
28 class D extends B {
29 }
30 
31 public class Test2 {
32     public static void main(String[] args) {
33         A a1 = new A();
34         A a2 = new B();//B类型向上转型丢失与A类不同方法
35         B b = new B();
36         C c = new C();
37         D d = new D();
38 //        B b1=new C(); 
39         System.out.println(a1.show(b)); ////B类的父类是A,所以A and A
40         System.out.println(a1.show(c)); ////C类父类的父类是A,D和他是同级。所以A and A
41         System.out.println(a1.show(d)); ////D类方法有,所以不会向上转型,所以A and D
42         System.out.println(a2.show(b)); //
43         /*注意这时候a2的两个方法其实是
44         public String show(D obj) {
45         return ("A and D");
46         }
47         public String show(A obj) {
48         return ("B and A");
49         }  B的父类是A,所以B and A 
50         */
51         System.out.println(a2.show(c)); ////C的父类的父类是A,所以B and A;
52         System.out.println(a2.show(d)); ////D有对应方法,所以A and D
53         System.out.println(b.show(b)); //
54         /*这个就是继承了,继承除了隐藏父类中和子类同名的方法外,在子类中可以直接使用父类的方法。所以B and B
55         所以就变成了
56         public String show(D obj) {
57         return ("A and D");
58         }
59         public String show(B obj) {
60         return ("B and B");
61         }
62         public String show(A obj) {
63         return ("B and A");
64         */
65         System.out.println(b.show(c)); ////C 的父类是B,所以B and B
66         System.out.println(b.show(d)); ////D有相应方法,所以A and D
67         
68 //        System.out.println("==========以下为加强认识,同理于A a2 = new B();//B类型向上转型丢失与A类不同方法");
69 //        
70 //        System.out.println(c.show(b));
71 //        System.out.println(c.show(c));
72 //        System.out.println(c.show(d));
73 //        
74 //        System.out.println(b1.show(b));
75 //        System.out.println(b1.show(c));
76 //        System.out.println(b1.show(d));
77     }
78 }
View Code

 运行结果:

 

 

 

 

 

那代码主要是:
1:继承时,子类会隐藏父类相同的方法,要调用父类方法就必须使用super关键字,在子类中可以直接使用父类方法
2:向上转型时,只保留子类中和父类同名的方法,和父类中其他非同名的方法


以上代码来自百度,所知,具体参考链接:

https://zhidao.baidu.com/question/1957878191123445420.html

 

 


 
学习参考链接:
java的继承https://www.runoob.com/java/java-inheritance.html

 

java提高篇(四)-----理解java的三大特性之多态:https://www.cnblogs.com/chenssy/p/3372798.html

 面向对象编程有三大特性:封装、继承、多态

 

----2020-04-20

posted @ 2020-04-20 21:06  九鸩  阅读(182)  评论(0编辑  收藏  举报