zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Swift流程控制之循环语句和判断语句详解
    框架内的文件集合
    十分钟让你明白Objective-C的语法(和Java、C++的对比)
    Swift版音乐播放器(简化版),swift音乐播放器
    通过数字电视通过宽带网络取代互联网电视机顶盒应用
    JS学习笔记-OO创建怀疑的对象
    如果不能显示真正的考验个别车型toast问题解决
    swift 它们的定义TabBarItem
    NSUserDefaults API简单的介绍和使用英文文件
    FZU 1686 龙之谜 重复覆盖
  • 原文地址:https://www.cnblogs.com/jiuzhen/p/12740418.html
Copyright © 2011-2022 走看看