Java中类的三大特性之一:继承 及 ‘super‘关键字的使用

继承

  • 继承的本质是对类的抽象,就比如动物类里面有胎生类,卵生类,然后还可以往下细分出一些其他的爬行类等等,后面派生出的类都继承了前类的一些特性,可以类比于对象与类的关系。

  • 继承是一种类与类之间的关系(子类与父类之间从意义上讲有一种“is a”的关系),类与类之间的关系还有依赖,聚合,组合等。

  • 继承的关键字是 extends ,该单词意思为“拓展”,即子类是父类的拓展。

  • extands继承存在于类与类之间,一个子类(派生类)不能继承多个父类(基类),但是一个父类可以被多个类继承,即一个儿子只能有一个亲爸爸,但是一个爸爸可以有多个亲儿子。

  • 子类如果继承了父类,则可以调用父类中的所有构造方法 与 publicprotected、默认(default)修饰符修饰的类,如果父类中的一些属性被private修饰符修饰,则子类无法继承这些属性。

  • 在Java中所有类都直接或间接的默认继承Object 类,即Object是所有类的老祖宗。
    在这里插入图片描述
    源码为:

public class Application {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.age=1;
        cat.name="小猫咪~";
        System.out.println("cat的年龄为:"+cat.age);
        System.out.println("cat的名字为:"+cat.name);
        cat.Cry();
    }
}
class Cat extends Animal{
//子类继承了父类,即使子类什么都没写也有可以调用的属性与方法
}
class Animal /*extends Object 本身就是默认继承Object类*/{
    public int age;
    public String name;
    public void Cry(){
        System.out.println(this.name+" is crying");
    }
}

IDEA中Ctrl+H可以展示出当前类的继承关系的树形图
在这里插入图片描述

super关键字

  • super与this关键字都不能在静态方法中被使用。
    在这里插入图片描述
    super 父类 - this 当前类
  • 针对于父类与子类的属性的调用
    在这里插入图片描述

源码如下:

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.Print("主类的name");
    }
}
class Person{
    String name="父类的nanme";
}
class Student extends Person{
    String name="子类的name";
    public void Print(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}
  • 针对于父类与子类的方法的调用
    在这里插入图片描述

源码如下:

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test();
    }
}
class Person{
    public void Print(){
        System.out.println("这是父类");
    }
}
class Student extends Person{
    public void Print(){
        System.out.println("这是子类");
    }
    public void test(){
        Print();
        this.Print();
        super.Print();
    }
}


  • 子类与父类中无参构造方法的执行情况
    在这里插入图片描述
    源码如下:
public class Application {
    public static void main(String[] args) {
        //使用new关键词,默认调用无参构造函数
        Student student = new Student();
    }
}
class Person{
    public Person() {
        System.out.println("父类中无参构造函数被调用");
    }
}
class Student extends Person{
    public Student() {
        System.out.println("子类无参构造函数被被调用");
    }
}
  • 问题:new了一个student类,它的无参构造函数被调用了,但是其父类也被调用了,而且还是在子类被调用之前被调用的。

  • 解析:其原因是因为使用继承关系的子类的无参构造方法中都有一个super();(调用父类的无参构造方法) 方法,且位于子类无参构造方法的模块之首。相当于是一个隐藏的方法。

在这里插入图片描述
利用super(); this();在无参构造函数中调用子类以及父类的构造函数的话,必须放在无参构造函数之首,且两者不可同时在子类的无参构造方法中出现,单个出现是可以的。

以下图片是对上段话的演示:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
this与super使用方法总结:

  • super:
    1、super调用父类的构造方法,必须在构造方法的第一个
    2、super必须只能出现在子类的方法或者构造方法中
    3、super和this不能同时出现在调用构造方法

this与super的一些区别:

  • 代表的对象不同:
    this:本身调用者这个对象
    super:代表父类对象的应用
  • 前提:
    this:没有继承也可以使用
    super:只能在继承条件下才可以使用
  • 构造方法:
    this():本类的构造
    super():父类的构造
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值