zoukankan      html  css  js  c++  java
  • 一道Java程序输出题(继承-重载-覆盖-向上转型的问题)

     1 class A {
     2     public String show(D obj) { // func1
     3         return ("A and D");
     4     }
     5     public String show(A obj) { // func2
     6         return ("A and A");
     7     }
     8 }
     9 class B extends A {
    10     public String show(B obj) { // func3
    11         System.out.println("1");
    12         return ("B and B");
    13     }
    14     public String show(A obj) { // func4
    15         System.out.println("2");
    16         return ("B and A");
    17     }
    18 }
    19 class C extends B {}
    20 class D extends B {}
    21 
    22 public class Main {
    23     public static void main(String[] args) {
    24         A a1 = new A();
    25         A a2 = new B();
    26         A b = new B();
    27         C c = new C();
    28         D d = new D();
    29         System.out.println(a2.show(b));
    30     }
    31 }

    输出结果为:"B and A"

    类B继承A,所以会从父类A得到函数fun1和fun2,因为fun4和fun2完全一样,故fun4覆盖了fun2,而fun3重载了fun1,故类B实际上有fun1,fun3,fun4三个函数,当给B传入表达式A b = new B() 中的b时,因为new B()向上转型到A,故只能调用fun4的函数,而不会把类型A向下转型到B或D,即不可能调用fun4或fun1.

  • 相关阅读:
    ios app相互调用
    Nginx连接频率限制
    nginx 基于域名的虚拟主机
    nginx基于多端口的虚拟主机
    Nginx基于多ip的虚拟主机
    多文件上传
    thinkphp5模型关联
    原生查询和查询构造器
    thinkphp5请求和响应
    thinkphp验证器
  • 原文地址:https://www.cnblogs.com/lasclocker/p/4870973.html
Copyright © 2011-2022 走看看