本帖最后由 晨熙c 于 2019-9-18 18:30 编辑
继承的概念
- 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法
- 实现继承的格式
- 继承通过extends实现
- 格式:class 子类 extends 父类 { }
- 举例:class Dog extends Animal { }继承好处
-提高了代码的复用性(多个类相同的成员可以放到同一个类中)
-提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
继承弊端
-继承让类与类之间产生了关系,类的耦合性增强了
-当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
super
-this&super关键字:
-this:代表本类对象的引用
-super:代表父类存储空间的标识(可以理解为父类对象引用)
this和super的使用分别
成员变量:
this.成员变量 - 访问本类成员变量
super.成员变量 - 访问父类成员变量
成员方法:
this.成员方法 - 访问本类成员方法
super.成员方法 - 访问父类成员方法
构造方法:
this(…) - 访问本类构造方法
super(…) - 访问父类构造方法
注意:子类中所有的构造方法默认都会访问父类中无参的构造方法 子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认都是:super()
方法重写概念 子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)
方法重写的应用场景 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
Override注解用来检测当前的方法,是否是重写的方法,起到【校验】的作用
继承案例: [Java] 纯文本查看 复制代码 //父类
public class Person {
private String name;//姓名
private String gender;//性别
private int age;//年龄
private String nationality;//国籍
//构造方法
public Person() {
}
public Person(String name, String gender, int age, String nationality) {
this.name = name;
this.gender = gender;
this.age = age;
this.nationality = nationality;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
//吃饭方法
public void eat(){
System.out.println("吃饭");
}
//睡觉方法
public void sleep(){
System.out.println("睡觉");
}
//工作方法
public void work(){
System.out.println("工作");
}
}
//子类
public class Student extends Person {
private String school;//学校
private int stuNumber;//学号
//构造方法
public Student() {//无参构造方法
}
//有参构造方法
public Student(String name, String gender, int age, String nationality, String school, int stuNumber) {
super(name, gender, age, nationality);
this.school = school;
this.stuNumber = stuNumber;
}
//get set 方法
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public int getStuNumber() {
return stuNumber;
}
public void setStuNumber(int stuNumber) {
this.stuNumber = stuNumber;
}
//重写工作方法
@Override
public void work() {
System.out.println("学生的工作是学习");
}
}
|