文章目录
- 每日一言
- 1. 什么是继承?
- 2. 子类怎么访问父类的成员变量?
- 2.1 不同名的怎么访问?
- 2.2 同名的怎么访问?
- 3. 子类怎么访问父类的成员方法?
- 3.1 不同名的怎么访问?
- 3.2 同名的怎么访问?
- 4. 如果我就是想访问同名的父类的成员怎么办?
- 5. 子类构造方法
- 6. Java中的继承方式
- 来小小的总结一下:
- 结语
每日一言
The best thing to hold noto in life is each other.
生命中最值得珍惜的便是彼此。——奥黛丽·赫本
1. 什么是继承?
答:简单来说,将两个类中的共性提取出来,把它们放到一个新的类中,然后采用继承的思想来达到共用。
让我们来举个栗子:
我们先定义两个类:狗和猫
狗:
猫:
通过观察我们发现,这两个对象有相似的地方:
既然有一些地方是重复的,那我们能不能给他重新创建一个类,把它们都放进去,当我们使用的时候直接从这个类中拿呢?
Of course ,当然可以。
我们可以创建一个新的Animal类:
那怎么把Cat和Dog与Animal建立联系呢?
答:使用extends
关键字
可以这样写:
以上就叫做继承。其中我们把Cat和Dog叫做子类(或派生类),Animal叫做父类(或基类、超类)。
注意:
- 子类会将父类中的成员变量或者成员方法继承到子类中
- 子类继承父类后,子类要有自己特有的成员,不然就没有必要继承了
2. 子类怎么访问父类的成员变量?
2.1 不同名的怎么访问?
让我们来测试一下:
运行结果:
通过测试我们发现:子类和父类的成员变量不同名时,我们可以在子类中直接访问父类的成员变量。
2.2 同名的怎么访问?
让我们来测试一下:
运行结果:
通过测试我们发现:子类和父类的成员变量同名时,优先访问子类的,如果子类中没有,则去访问父类的。
3. 子类怎么访问父类的成员方法?
以下的问题我就不再测试了,直接写结论了,交给你们来测试一下
3.1 不同名的怎么访问?
答:不同名时,可以直接访问。
3.2 同名的怎么访问?
答:同名时,优先访问子类的成员方法,如果子类中没有就去访问父类的成员方法,如果还是找不到就报错。(编译器懵了qwq)
4. 如果我就是想访问同名的父类的成员怎么办?
Java考虑的很周到,提供了super关键字,我们可以通过super.xxx
的方式在子类方法中访问父类的成员。
举个栗子:
运行结果:
注意:
- super只能在非静态方法中使用,否则报错。
- 必须是在子类方法中,访问父类的成员变量或方法。
5. 子类构造方法
当子类继承了父类之后,在实例化子类对象的时候要先帮助父类进行构造(初始化父类的成员)
class Parent {
public Parent() {
System.out.println("Parent");//父类构造方法
}
}
class Subclasses extends Parent{
public Subclasses() {
System.out.println("Subclasses");//子类构造方法
}
}
public class Test {
public static void main(String[] args) {
Subclasses subclasses = new Subclasses();
}
}
以上代码的运行结果:
我们看到,实例化子类对象时,先调用了父类的构造方法输出了Parent,然后才调用子类的构造方法输出了Subclasses。
可见:
在实例化子类对象的时候先执行父类的构造方法,然后再执行子类的构造方法。
此时有人就要说了:临水,你看看上一个例子中的代码,你的父类没写任何的构造方法,而且在子类中也没有看见哪里调用了父类的构造方法,为啥刚刚写的代码不报错?你这不是搬起石头砸自己的脚么?
诶嘿嘿,不得不说,小伙子观察的挺细致,这是因为在子类构造方法中默认会调用父类的无参构造方法:super()
当用户没有写时,编译器会自动帮你添加。但你要小心了,一旦你写了编译器就不会自动添加了。
注意:super()必须是子类构造方法中的第一条语句,并且它只能出现一次,否则报错。
6. Java中的继承方式
在Java中只支持以下几种继承方式:
- 单继承
public class A{
//.....
}
public class B extends A{
//.....
}
- 多层继承
public class A{
//.....
}
public class B extends A{
//.....
}
public class C extends B{
//.....
}
- 不同类继承同一个类
public class A{
//.....
}
public class B extends A{
//.....
}
public class C extends A{
//.....
}
注意:在Java中不支持多继承!
来小小的总结一下:
- 继承就是将两个类的共性提取出来,放到一个类中,从而实现代码的简化
- 在子类中访问父类的不同名成员时,直接使用就行。
- 在子类中访问父类的同名成员时,优先访问子类的。如果就是想访问父类的,需要用super关键字来访问。
- 在实例化子类对象的时候先执行父类的构造方法,然后再执行子类的构造方法。
- 在Java中支持单继承、多层继承和不同类继承同一个类。但不支持多继承。
结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正