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 }
运行结果:
那代码主要是:
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