面向对象三大特性之继承(2)

1.什么是继承?

世间万物本就相互联系,java中的类也是如此,java中的类其实也就是对现实世界事物的抽象。而这些类之间也存在这各种关系,例如继承、依赖、关联、组合等。而其中的继承通俗理解就是子集的概念,即常说一个类继承于他的父类,也就是说他是他的父类的一个子集,学生是人类的子集,猫是动物的子集等。

在java编程中继承关系的表示就是用extends关键字。并且子类是可以继承父类所有的属性和方法,当然private修饰的除外。

2.继承的初始化顺序

当我们创建一个子类的对象时,执行顺序是如何的呢?

//父类
public class People {
    public String name = "donreen";
    public int age = 20;
    public People(){
        System.out.println(name+"是人, 今年"+age+"岁了。");
    }
}

//子类
public class Student extends People{
    public Student(){
        System.out.println(name+"是一个学生,今年"+age+"岁了。");
    }
}

//测试类
public class FirstDemo {
    public static void main(String[] args){
        Student stu = new Student();
    }
}

输出结果
通过输出结果可以看出来,先初始化父类,然后才是初始化子类。
这个执行顺序也可以通过super关键字来理解,也就是接下来要说的。

3.super关键字的使用

  1. 子类如果想使用父类的属性或方法,那么通过super.属性名super.方法名来调用。
    (如果子类中没有与父类中重名的属性或方法,也可以直接用属性名或方法名调用,不过不是很推荐,毕竟写着写着可能就混了)
  2. 子类的构造方法中必须使用super()调用父类的构造方法,而且必须写在第一行,这也就是解释了前面的初始化顺序;
    需要注意的是,如果父类中存在无参的构造方法,你会发现即使子类没有在构造方法中调用父类的构造方法,也不会报错,这是因为当父类中存在无参的构造方法时,程序会隐式的调用super()【隐式即存在这行代码,但是我们程序员看不见】;但是如果父类中没有无参的构造方法,就得我们自己去调用。

(顺便提一下,在一个类中,如果我们没写构造方法,程序会隐式地存在无参的构造方法,但是只要我们写了有参的构造方法,就不会再有无参的构造方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值