zoukankan      html  css  js  c++  java
  • [java] 转型

    A为父类,子类B、C

    第20行发生向上转型,a对象调用C覆写过的print()方法

    若为A a = new B(); 则调用B覆写过的print()方法

    创建对象时使用向上转型,能够统一参数类型(23行),便于程序设计

     1 package inheritance;
     2 
     3 class A{
     4     public void print() {
     5         System.out.println("A.pirnt");
     6     }
     7 }
     8 class B extends A{
     9     public void print() {
    10         System.out.println("B.print");
    11     }
    12 }
    13 class C extends A{
    14     public void print() {
    15         System.out.println("C.print");
    16     }
    17 }
    18 public class TestDemo {
    19     public static void main(String args[]) {
    20         A a1 = new B();
    21         A a2 = new C();
    22         fun(a1);
    23         fun(a2);
    24         System.out.println(a1 instanceof A);
    25         System.out.println(a1 instanceof B);
    26         System.out.println(a1 instanceof C);
    27     }
    28 public static void fun(A a) {
    29     a.print();
    30 }
    31 }

    结果:

    B.print
    C.print
    true
    true
    false

    如果子类有自己的特殊方法,没有在父类中定义,则父类访问子类的方法需要将父类对象向下转型:B b = (B) a,但这样会破坏参数的统一性,所以在开发中不建议使用

    原则:以父类方法为主,子类可以覆写父类方法,但尽量不要扩充新方法

  • 相关阅读:
    Atcoder ARC-104
    [ZJOI2019]线段树
    【XR-2】伤痕
    CF1103B Game with modulo
    [BJOI2019]删数
    AT2402 [ARC072D] Dam
    十六、JMeter实战-跨线程调用token
    十五、JMeter实战-关联-JSON提取器和边界值提取器
    十四、JMeter实战-关联获取token
    十三、JMeter实战-关联-正则表达式
  • 原文地址:https://www.cnblogs.com/cxc1357/p/11033047.html
Copyright © 2011-2022 走看看