大家好,我是卷心菜,可以叫我菜菜(名副其实了属于是,哈哈~),大二学生一枚。本篇主要讲解Java面向对象的三大特征之一:继承性。从基本概念出发,到代码举例、继承性分析、方法重写、以及super关键字的使用,确保读者可以完整的学习到继承的一系列知识!如果您看完文章有所收获,可以三连支持博主哦~,嘻嘻。
文章目录
- 一、基本介绍
- 二、代码举例
- 三、继承性分析
- 四、方法重写
- 五、super关键字
一、基本介绍
继承性的概念
:是指一个类可以基于另一个已经存在的类,也就是子类基于父类,从而实现父类代码的重用,子类可以调用父类的属性和方法,并能扩展新的能力。为什么要有继承
:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。语法规则
:class 子类 extends 父类{ }
二、代码举例
写一个父类Person,分别有一个权限为public和private的属性和方法:
public class Person {
private String name = "我是人";
public int age = 20;
public void say() {
System.out.println("你好呀");
}
private void sleep() {
System.out.println("喜欢睡觉");
}
}
然后写一个子类Student继承父类Person:
public class Student extends Person { }
然后写一个类用来测试,从下图我们可以发现:当Student继承Person后,通过"对象.属性"
的方法,可以直接使用父类权限为public的属性和方法,不能直接使用权限为private的属性和方法。
三、继承性分析
1、继承性的好处:
- 减少了代码的冗余,提高了代码的复用性
- 为之后多态性的使用,提供了前提
- 便于功能的扩展
2、继承性的体现:
- 一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法
- 特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构,只有因为封装性的影响,使得子类不能直接调用父类的结构而已
- 子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展
3、Java中关于继承性的规定:
- 一个类可以被多个子类继承
- Java中类的单继承性:一个类只能有一个父类
- 子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
4、所有类都继承Object类:
- 如果我们没有显式的声明一个类的父类的话,则此类继承于java.lang.Object类
- 所有的java类都直接或间接的继承
java.lang.Object
类(Object类除外) - 所有的java类具有java.lang.Object类声明的功能
- 子类实现父类后,各自拥有的属性不会被覆盖
四、方法重写
1、方法重写的特点:
- 子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
- 重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。
2、重写的规定:
-
子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
-
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
-
特殊情况:子类不能重写父类中声明为private权限的方法
3、返回值类型:
-
父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
-
父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类
-
父类被重写的方法的返回值类型是基本数据类型(比如:int),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是int)
-
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
-
子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)
五、super关键字
总的来说,super可以用来调用:属性、方法、构造器
1、super的使用:调用属性和方法:
- 可以在子类的方法或构造器中。通过使用
"super.属性"
或"super.方法"
的方式,显式的调用父类中声明的属性或方法。通常情况下,习惯省略"super." - 特殊情况:当子类和父类中定义了同名的属性时,要想在子类中调用父类中声明的属性,则必须显式的使用
"super.属性"
的方式,表明调用的是父类中声明的属性。 - 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用
"super.方法"
的方式,表明调用的是父类中被重写的方法。
2、super调用构造器:
- 可以在子类的构造器中显式的使用
"super(形参列表)"
的方式,调用父类中声明的指定的构造器 "super(形参列表)"
的使用,必须声明在子类构造器的首行!- 在类的构造器中,针对于
"this(形参列表)"
或"super(形参列表)"
只能二选一,不能同时出现 - 在构造器的首行,没有显式的声明
"this(形参列表)"
或"super(形参列表)"
,则默认调用的是父类中空参的构造器super() - 在类的多个构造器中,至少有一个类的构造器中使用了
"super(形参列表)"
,调用父类中的构造器
谢谢阅读,一起进步,嘻嘻~