继承总结收获

前言

  1. 继承主要解决的问题就是: 共性提取
  2. 在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当作父类看待。比如说父类 是员工类,子类是讲师类,那么“讲师就是一名员工”关系。它们之间的关系可形象地表达为 is a…
  3. @Override 重写方法注解,可以用来检测重写方法方法名和方法参数是否正确。

super、this关键字

super 关键字的用法有三种:

  1. 在子类的成员方法中,访问父类的 成员变量
  2. 在子类的成员方法中,访问父类的 成员方法
  3. 在子类的构造方法中,访问父类的 构造方法

子类构造方法中默认调用了super() 方法。如果父类定义了有参构造方法,默认的构造方法将不再提供,此时子类的构造方法就会报错。

public class Fu {
// 父类定义
    public Fu() {
    // 无参构造方法一定要给出,子类默认调用这个
        System.out.println("父类");
    }
    public Fu(int num) {
    // 有参构造方法
        System.out.println("父类构造方法执行");
    }
}

public class Zi extends Fu {
    public Zi() {
//     super();  // 隐含着;赠送着
       super(20);
        System.out.println("子类构造方法执行");
    }
}
public class Fu {
    int num = 10;

    public void method() {
        System.out.println("父类方法");
    }
}

public class Zi extends Fu{
    int num = 20;

    public Zi() {
        super();
    }

    public void methodZi() {
        // super关键字访问父类中的成员变量
        System.out.println(super.num);
    }

    @Override
    public void method() {
        super.method(); // super关键字访问父类中的method
        System.out.println("子类方法");
    }
}

super 关键字用来访问父类内容,而 this 关键字用来访问本类内容。用法也有三种:

  1. 在本类的成员方法中,访问本类的成员变量。
  2. 在本类的成员方法中,访问本类的另一个成员方法。
  3. 在本类的构造方法中,访问本类的另一个构造方法。(this(…)调用必须是构造方法的第一个语句,唯一一个)

public class Zi extends Fu{
    int num = 20;
    
      public Zi() {
        this(123);    // 本类的无参构造调用本类的有参构造,类似 super
    } 
    
    public Zi(int n) {
        
    }

    public void shouNum() {
        int num = 10;
        System.out.println(num); // 局部变量
        System.out.println(this.num); // 访问本类当中的num
        System.out.println(super.num); // 访问父类当中的num
    }

    public void methodA() {
        System.out.println("AAA");
    }

    public void methodB() {
        this.methodA(); // 可以达到在本类中访问另一个成员方法的效果,this标志着是本类中的方法
        System.out.println("BBB");
    }
}

super 与 this 关键字内存图解

1 、 一定是class文件先去方法区,值得注意的是有继承关系的类进入方法区的时候,编译完之后 .class 文件中有一个特殊标记,它其实是一个指向,指向父亲,告诉父亲是谁,好比 extends关键字。
在这里插入图片描述


2 、 在 main方法进入方法栈创建子类 Zi 对象后,在堆内存是不是和平常一样呢?

一个子类对象包含一个完整的父类结构,先把父类内容构造好了,再在外围构造子类内容。里面是 父,外面是子,两层嵌套结构。

注意:堆当中方法保留的是地址值哦。继承关系内存图

3、 在super 与 this 关键字的运用时,this 会去子类内容里去找,super会去父类内容里面去找 。子类调用 method 方法中有super.method() 所以会去父类内容找到方法地址。
在这里插入图片描述

Java继承的三个特点

  1. Java 语言是单继承的。 一个类的直接父类只能有唯一一个。
  2. Java 语言可以多级继承。我父亲还有父亲。
  3. 一个父类可以拥有很多个子类。可以有很多个兄弟姐妹。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值