1. 什么是继承?
Java中提供一个关键字extends(扩展),用这个关键字,我们可以让一个类和另一个类建立起父子关系。
Student称为子类(派生类),People称为父类(基类 或超类)。
作用:当子类继承父类后,会具有父类的属性和方法,同时,子类还可以添加其他的的方法或属性,以扩展父类的功能
2.继承的好处
1.提高了代码的复用性(多个类相同的成员可以放在同一个类中)
2.提高了代码的维护性(如果方法的代码需要改,修改父类中的方法即可)
3.继承的特点
1.将子类公共的属性抽取出来生成父类属性用于继承。
2.子类可以继承父类的属性和行为,但是子类不能继承父类的构造方法。 Java是单继承模式,即一个类只能继承一个直接父类。 Java不支持多继承、但是支持多层继承。
3.Java中所有的类都是Object类的子类。
4.子类不可以的继承父类的构造方法,子类有自己的构造方法,父类构造器用于初始化父类对象。
5.子类可以继承父类的私有成员,只是不能直接访问。
4.继承中变量访问的特点
在子类方法中访问一个变量:
子类局部范围找 --没有–>子类成员范围找 --没有–> 父类成员范围找。
注意:
如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的
如果一定要使用父类的,可以通过super关键字,进行区分。
package com.extend.java;
public class Person { //父类Person
//数据成员
private String name;
private String sex;
private int age;
public Person(){//无参构造
}
public Person(String name,String sex,int age){//有参构造
this.name = name;
this.sex = sex;
this.age = age;
}
//setter,getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//功能方法,获取某人的信息
public String getPerson(){
return "姓名:" + this.name + ",性别:" + this.sex + ",年龄:" + this.age;
}
}
package com.extend.java;
public class Student extends Person{ //Person类的子类Student
//子类的数据成员
private String className;
//子类构造方法
public Student(){//无参构造
}
public Student(String name, String sex, int age, String className){//有参构造
super(name, sex, age);
this.className = className;
}
//setter,getter方法
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
//功能方法,获取某人的信息
public String getStudent(){
return this.getPerson() + ",班级:" + this.className;
}
}
package com.extend;
import com.extend.java.Student;
public class Demo006 {
public static void main(String[] args) {
Student swk = new Student("沈括","男",16,"物理实验班");
System.out.println(swk.getStudent());
System.out.println(swk.getPerson());//子类可以直接访问从父类继承的public方法
//子类访问从Person类继承的getName()方法
System.out.println("姓名:" + swk.getName());
}
}
结果展示: