Java语言是一门面对对象设计的语言,而面对对象设计有三大特征,它们分别是封装、继承、多态。
今天要讲的是三大特征中的继承;
概述:继承的主要作用在于,在已有的基础上进行功能的扩充操作(可重用)
要使用继承,必须使用“ is - a ”原则
何为is - a 原则:
例:student is a person。
只要不符合这种规定则不能用继承;
看下面一段代码:
class Person{
private String name;
private int age;
public void setname(String name){
this.name = name;
}
public void setage(int age){
this.age = age;
}
public String getname(){
return this.name;
}
public int getage(){
return this.age;
}
}
class Student{
private String name;
private int age;
private String school;
public void setname(String name){
this.name = name;
}
public void setage(int age){
this.age = age;
}
public void setschool(String school){
this.school = school;
}
public String getname(){
return this.name;
}
public int getage(){
return this.age;
}
public String getschool(){
return this.school;
}
}
public class Day5{
public static void main(String[] args){
Student stu = new Student();
stu.setage(20);
stu.setname("zangsan");
stu.setschool("qinghua");
System.out.println(stu.getage());
System.out.println(stu.getname());
System.out.println(stu.getschool());
}
}
这是一段很浅显易懂的代码,我们定义了一个“person”类和一个“student”类,我们可以看到,这两个类中的代码基本一模一样,只是在student类中加了一个school属性,这样的代码看起来太过繁杂,我们这时便可以想到继承。
继承使用:子类使用extends继承父类
无需重复编写代码的情况下拥有父类的⭐所有⭐成员
注意:java只允许单继承不允许多继承(一个类只能继承一个父类)
看下面使用继承后的代码:
class Person{
private String name;
private int age;
public void setname(String name){
this.name = name;
}
public void setage(int age){
this.age = age;
}
public String getname(){
return this.name;
}
public int getage(){
return this.age;
}
}
// *****************继承********************
class Student extends Person{
private String school;
public void setschool(String school){
this.school = school;
}
public String getschool(){
return this.school;
}
}
public class Day5{
public static void main(String[] args){
Student stu = new Student();
stu.setage(20);
stu.setname("zangsan");
stu.setschool("qinghua");
System.out.println(stu.getage());
System.out.println(stu.getname());
System.out.println(stu.getschool());
}
}
此代码比原先的简洁多了,而且可以清楚的认识到这两个类之间的关系;
父类也叫 基类
子类也叫 派生类
下面来看一下子类与父类中的构造方法:
看一段代码:
class Person{
public Person(){
System.out.println("Person类的构造方法");
}
}
class Student extends Person{
public Student(){
System.out.println("Student类的构造方法...");
}
}
public class Day5{
public static void main(String[] args){
Student stu = new Student();
}
}
这段代码的输出结果是:
Person类的构造方法
Student类的构造方法...
由此我们可以观察到 :
1.子类对象在实例化前一定会首先实例化父类对象。
2.先调用父类构造方法,后再调用子类构造方法。