继承的简介
是面向对象最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
已有的类,叫==父类==,又叫基类,超类。 派生出来的新类,叫==子类==,也叫派生类。 使用关键字extends 来表示子类继承了父类。
class A{}
class B extends A{}
class C extends A{}
继承特点
1、Java只支持单继承,即一个类只能有一个父类;但是一个类可以有多个子类。
2 、java支持多重继承,即一个类在继承自一个父类的同时,还可以被其他类继承。 可见继承具有传递性
3、子类继承了父类的所有成员变量和方法,包括私有的(只不过没有访问权限),当然也包括静态成员。
4、子类不会继承父类的构造方法,只能调用父类里的构造方法,并且一定至少有一个子类构造器调用了父类的构造器。
5 、子类在拥有父类的成员的基础上,还可以添加新成员。
继承中的构造器
一个对象在实例化的时候,需要在堆上开辟空间,堆中的空间分为两部分,分别是从父类继承到的属性,子类特有的属性。而实例化父类部分的时候,需要调用父类中的构造方法。
值得注意的是,默认调用的是父类中的无参构造器。如果父类中没有无参构造器,那么子类需要显式调用父类中的某一个有参构造器。子类继承过来的属性需要初始化
在子类的构造方法中,使用==super(有参传参)==调用父类中存在的构造方法,而且==super(有参传参)==必须放在首行首句的位置上。因此可知,==super(有参传参)==和==this(有参传参)==不能在一个构造器中共存
以下Person类充当父类
public class APerson {
private String name;
private int age;
private char gender;
public APerson(){}
public APerson(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = 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 char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}
定义一个学生类型,有人的特征,可以继承过来
public class Student extends APerson{
private String studentId;
private String classNo;
public Student(String studentId,String classNo){
super("小十八狗",1,'男');
this.studertId = studentId;
this.classNo = classNo;
}
public Student(String name,int age,char gender,String studentId,String classNo){
super(name,age,gender);
this.studentId = studentId;
this.classNo = classNo;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getClassNo() {
return classNo;
}
public void setClassNo(String classNo) {
this.classNo = classNo;
}
public String toString(){
return "name:"+getName()
+",age:"+getAge()
+",gender:"+getGender()
+",studentId:"+studentId
+",classNo:"+classNo;
}
}
}
构造器的测试
public class StudentTest {
public static void main(String[] args) {
//调用子类的五个参数的构造器
Student xiaoming =
new Student("小明",18,'男',"A20240001","C1001");
System.out.println(xiaoming);
//调用子类的两个参数的构造器
Student xiaohei = new Student("A20240002","C1001");
System.out.println(xiaohei);
}
}
。