一、面向对象编程-继承
1)为什么需要继承?
案例:我们编写了两个类,一个是Pupil类(小学生),一个是Graduate(大学毕业生)
问题:两个类的属性和方法有很多是相同的,怎么办?
这就需要用到继承:(提高代码的复用性)
访问修饰符的访问范围
二、继承的基本介绍和示意图
1)继承的基本介绍
继承可以解决代码复用
,
让我们的编程更加靠近人类思维
.
当多个类存在相同的属性
(
变量
)
和方法时
,
可以从这些类中 抽象出父类,
在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过
extends
来 声明继承父类即可。
2)继承的示意图
3)继承的基本语法
class 子类 extends 父类{
}
1)子类就会拥有父类定义的属性和方法
2)父类又叫做 超类 基类
3)子类又叫做派生类
三、入门案例
学生类
package com.Student;
import java.sql.SQLOutput;
public class Student_ {
public String name;
public int age ;
private double score;
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 double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public void info(){
System.out.println("学生"+name+"今年"+age+"岁了"+"考了"+score);
}
}
小学生类
package com.Student;
public class pupil extends Student_ {
}
大学生类
package com.Student;
public class Graduate extends Student_{
}
main类
package com.Student;
public class Test {
public static void main(String[] args) {
Graduate graduate = new Graduate();
graduate.setAge(18);
graduate.setName("jack");
graduate.setScore(100);
pupil pupil = new pupil();
pupil.setAge(17);
pupil.setName("rose");
pupil.setScore(150);
graduate.info();
pupil.info();
}
}
四、继承的好处
1)代码的复用性提高了
2)
代码的扩展性和维护性提高了
五、细节问题(重要)
1)
子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问
,
但是私有属性和方法不能在子类直接访问,需要通过父类提供公共的方法去访问
2)
子类必须调用父类的构造器, 完成父类的初始化
3)
当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用
super
去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译
不会通过(
怎么理解。
)
4)
如果希望指定去调用父类的某个构造器,则显式的调用一下
: super(
参数列表
)
5) super
在使用时,必须放在构造器第一行
(super
只能在构造器中使用
)
6) super()
和
this()
都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
7) java
所有类都是
Object
类的子类
, Object
是所有类的基类
.
8)
父类构造器的调用不限于直接父类!将一直往上追溯直到
Object
类
(
顶级父类
)
9)
子类最多只能继承一个父类
(
指直接继承
)
,即
java
中是单继承机制。
思考:如何让
A
类继承
B
类和
C
类? 【
A
继承
B
,
B
继承
C
】
10)
不能滥用继承,子类和父类之间必须满足
is-a
的逻辑关系