zoukankan      html  css  js  c++  java
  • Java中的继承:父类和子类的关系

    一、父类引用指向子类对象时

    1、若子类覆盖了某方法,则父类引用调用子类重新定义的新方法

    2、若子类未覆盖某方法,则父类引用调用父类本身的旧方法

    3、若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性

    4、若子类未覆盖某属性,则父类引用调用父类本身的旧属性

    5、父类引用不能访问子类新定义的方法

    二、子类引用指向自身对象时

    1、若子类覆盖了某方法,则子类引用调用子类重新定义的新方法

    2、若子类未覆盖某方法,则子类引用调用父类本身的旧方法

    3、若子类覆盖了某属性,则子类引用调用子类重新定义的新属性

    4、若子类未覆盖某属性,则子类引用调用父类本身的旧属性

    5、子类引用可以访问子类新定义的方法

    三、示例代码

     
    B.java
    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class B {  
    2.   
    3.     int a = 1;  
    4.     int b = 2;  
    5.   
    6.     void f1() {  
    7.         System.out.println("B.f1()");  
    8.     }  
    9.   
    10.     void f2() {  
    11.         System.out.println("B.f2()");  
    12.     }  
    13.   
    14. }  

    C.java
    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. public class C extends B {  
    2.   
    3.     int a = 3;  
    4.   
    5.     @Override  
    6.     void f1() {  
    7.         System.out.println("C.f1()");  
    8.     }  
    9.   
    10.     void f3() {  
    11.         System.out.println("C.f3()");  
    12.     }  
    13.   
    14.     public static void main(String[] args) {  
    15.   
    16.         B b = new C();// 父类引用指向子类对象  
    17.         b.f1();// 子类覆盖了该方法,所以父类引用调用新方法  
    18.         b.f2();// 子类未覆盖该方法,所以父类引用调用旧方法  
    19.         // b.f3();此行去掉注释会报错,父类引用不能访问子类新定义方法  
    20.         System.out.println(b.a);// 子类覆盖了该属性,但父类引用仍旧访问旧属性  
    21.         System.out.println(b.b);// 子类未覆盖该属性,父类访问旧属性  
    22.   
    23.         System.out.println();  
    24.   
    25.         C c = new C();// 子类引用指向自身对象  
    26.         c.f1();// 子类覆盖了父类方法,所以调用新方法  
    27.         c.f2();// 子类未覆盖父类方法,所以调用旧方法  
    28.         c.f3();// 子类调用自己新定义的方法  
    29.         System.out.println(c.a);// 子类覆盖了该属性,所以访问新属性  
    30.         System.out.println(c.b);// 子类未覆盖该属性,所以访问旧属性  
    31.     }  
    32. }  

    输出:
    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. C.f1()  
    2. B.f2()  
    3. 1  
    4. 2  
    5.   
    6. C.f1()  
    7. B.f2()  
    8. C.f3()  
    9. 3  
    10. 2  
  • 相关阅读:
    CF960G-Bandit Blues【第一类斯特林数,分治,NTT】
    P6122-[NEERC2016]Mole Tunnels【模拟费用流】
    P5404-[CTS2019]重复【KMP,dp】
    P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】
    T183637-变异距离(2021 CoE III C)【单调栈】
    61-A
    2021-4-1考试
    JAVA日常练习—程序输入string转化为int并求和
    并发编程
    git clone 报filename too long 错误的解决方法
  • 原文地址:https://www.cnblogs.com/Yxxxxx/p/6853672.html
Copyright © 2011-2022 走看看