Java成员覆盖

当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量。 这个听起来很容易理解的一回事,但是实际使用过程中很多人容易搞混:尤其是在多态的时候,调用一个被继承的方法,该方法访问是一个被覆盖的成员m,那么方法中到底是访问了父类的成员还是子类的成员m?结论是,若实际调用的是父类的方法,就使用了父类的该成员m,若实际调用的是子类的方法,就使用子类的成员m,记住一句,每个类使用成员在前面都隐含着一个this指针:A.this.member

class SuperClass {
    private int number;
    public SuperClass() {
    this.number = 0;
    }
    public SuperClass(int number) {
    this.number = number;
    }
    public int getNumber() {
    number++;
    return number;
    }
}
class SubClass1 extends SuperClass {
public SubClass1(int number) {
    super(number);
  }
 }

class SubClass2 extends SuperClass {
private int number;


public SubClass2(int number) {
    super(number);
}

}

public class SubClass3 extends SuperClass {

private int number;

public SubClass3(int number) {
    super(number);
}

public int getNumber() {
    number++;
    return number;
}

public static void main(String[] args) {
    SuperClass s1 = new SubClass1(20);
    SuperClass s2 = new SubClass2(20);
    SuperClass s3 = new SubClass3(20);
    System.out.println(s1.getNumber());
    System.out.println(s2.getNumber());
    System.out.println(s3.getNumber());
    //结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖 的方法
    //结论二:当子类覆盖父类的成员变量时,父类方法使用的是 父类的成员变量,子类方法使用的是子类的成员变量
}
}

执行输出:
21
21
1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,695评论 0 11
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,096评论 0 4
  • 考研结束了这么久很难再像备考的时候一样集中精神钻研学问了,但我明确被录取只是一个科研路小小的开始。 每天高度紧绷的...
    Yunkilady阅读 706评论 4 2