为什么要使用继承?
在这里先写一个Person类
//人类
class Person{
private String name;
private int age ;
//默认构造方法
public String getPersonInfo(){
return "姓名: "+this.name+"年龄: "+this.age;
}
//getXxx setXxx
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
}
再来写一个学生类
//学生类
class Student {
private String name;
private int age ;
private String studentNum;
//构造方法
public void setStudentNumber(String studentNum){
this.studentNum=studentNum;
}
public String getStudentInfo(){
return "姓名: "+this.getName()+"年龄: "+this.getAge()+"学号: "+this.studentNum;
}
//getXxx setXxx
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getStudentNumber(){
return this.studentNum;
}
}
我们可以看出上面两个类中重复的代码太多,这样大大浪费了我们的时间,为了减少这种结构定义上的重复,就要用到Java中一个非常重要的概念-----继承
通过分析可以发现,学生是人类的一个具体化,比人类的属性多了几条.也就是说,学生继承了人类的属性,对上面的两个类进行了继承.
继承具体实现语法
class 子类 extends 父类
//人类
class Person{
private String name;
private int age ;
//默认构造方法
public String getPersonInfo(){
return "姓名: "+this.name+"年龄: "+this.age;
}
//getXxx setXxx
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
}
//学生类继承人类
class Student extends Person {
private String studentNum;//属性的扩充
public String getStudentInfo(){
return "姓名: "+this.getName()+"年龄: "+this.getAge()+"学号: "+this.studentNum;
}
public String getStudentNumber(){
return this.studentNum;
}
public void setStudentNumber(String studentNum){
this.studentNum=studentNum;
}
}
//测试
public class Test1 {
public static void main(String[] args){
Person person1 =new Person();//实例化人类
person1.setName("张三");
person1.setAge(18);
System.out.println(person1.getPersonInfo());
Student student1 = new Student();//实例化学生类
student1.setStudentNumber("2018");
System.out.println(student1.getStudentInfo());
}
}
继承的主要作用是对类进行扩充以及代码的重用
继承的限制
1.子类对象在进行实例化前一定会首先实例化父类对象.默认调用父类的构造方法后再调用子类构造方法进行子类对象初始化.
2.在Java中都是单继承,允许多层继承。
3.子类继承父类,能不能访问父类的属性取决于父类的访问控制符。
4.继承的主要作用是对类进行扩充以及代码的重用。
- 在进行继承的时候,子类会继承父类的所有结构。(包含私有属性、构造方法、普通方法)但是这个时候需要注意的是,所有的非私有操作属于显示继承(可以直接调用),所有的私有操作属于隐式继承(通过其他形式调用,例如setter或getter)
覆写(override)
说到继承,我们就不得不说一下覆写
https://blog.csdn.net/baidu_41813368/article/details/84790605
super关键字
https://blog.csdn.net/baidu_41813368/article/details/84790667