继承:提高代码的复用性
继承的好处
- 避免代码重复
- 修改父类,影响所有的子类(增加了耦合性)
如何继承:使用extends关键字
- 如果一个类没有指定父类,默认父类是Object,Object类是所有类的父类
- 单继承 一个类只能有一个父类 C++可以多继承
- 可以多层继承
一父二子一测试
(1)编写父类
public class Person {//父类
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public Person() {
}
public void introduce(){
System.out.println("姓名:"+name+"\t年龄:"+this.getAge()+"\t性别:"+this.gender);
}
}
(2)编写Student和Teacher两个子类
public class Student extends Person {//Student类是Person类的扩展
private String stuNo;
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public Student(String name, int age, String gender, String stuNo) {
super(name, age, gender);//调用父类的带三个参数的构造方法s
this.stuNo = stuNo;
}
public Student() {
}
}
public class Teacher extends Person {//Teacher也是Person的扩展,Teacher是Person的子类
private int teachOfYear;
public int getTeachOfYear() {
return teachOfYear;
}
public void setTeachOfYear(int teachOfYear) {
this.teachOfYear = teachOfYear;
}
public Teacher(String name, int age, String gender, int teachOfYear) {
super(name, age, gender); //调用父类的带三个参数的构造方法
this.teachOfYear = teachOfYear;
}
public Teacher() {
}
}
测试
public class Test {
public static void main(String[] args) {
//(1)创建Student类的对象
Student stu=new Student("张三",20,"男","sxt1001");
//创建Teacher类的对象
Teacher tea=new Teacher("李四",30,"男",6);
//来个自我介绍
stu.introduce(); //父类的方法,子类可以继承
tea.introduce();
}
}
继承可以从父类继承非private的属性,非private的方法,不能继承构造方法,可以调用父类的构造方法
super关键字的作用:
a)调用父类的非private属性
b)调用父类的构造方法,要求必须是构造方法中第一句代码
c)调用父类的非private成员方法 super.introduce();
d)用于父类与子类的同名属性的区分,super指代的是父类,this指代的是子类