一、为什么要继承?
在日常生活中的继承一般是说从父母那里继承某些东西。比如小刚的鼻子像爸爸,眼睛像妈妈。并且小刚又继承了父亲的勇敢、善良。在面向对象的世界中,也存在着继承特性,继承是面向对象程序设计的重要特性之一。继承的最大的优点就是提供了代码的重用性。
我们接下来看一下下面的类图有什么样的问题?
通过类图我们发现两个类里有很多相同的属性和方法,代码出现了重复。那么,如何做优化设计呢?我们可以通过继承来实现优化设计。
二、使用继承优化后
三、如何使用继承?
1. 编写父类
class Pet {
//公共的属性和方法
}
2.编写子类,继承父类
class Dog extends Pet {
//子类特有的属性和方法
}
class Penguin extends Pet {
//子类特有的属性和方法
}
四、子类访问父类成员
1. 访问父类构造方法
super();
super(name);
2.访问父类属性
super.name;
3.访问父类方法
super.print();
五、继承的特性
1. 子类拥有父类非 private 的属性、方法
2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
3. Java中的继承是单继承。即一个子类只有一个父类。但是继承是具有传递性的。例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类
4. 继承提高了类之间的耦合性
5. 继承可以实现代码的复用
6. 子类可以用自己的方式重写父类的方法
四、代码演示
1. 编写父类:
publicclassPet {
//名字
protectedString name;
//亲密度
protectedintlove;
//健康值
protectedinthealth;
publicPet(String name,int love,int health){
this.name=name;
this.love=love;
this.health=health;
}
publicPet(){
}
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicintgetLove() {
returnlove;
}
publicvoidsetLove(int love) {
this.love = love;
}
publicintgetHealth() {
returnhealth;
}
publicvoidsetHealth(int health) {
this.health = health;
}
publicvoidprint(){
System.out.println("我的名字叫:"+this.name+",和主人的亲密度 是:"+this.love+",我的健康值是:"+this.health);
}
}
2. 编写子类Dog类:
publicclassDog extends Pet{
//品种
privateString strain;
publicString getStrain(){
returnthis.strain;
}
publicvoidsetStrain(String strain){
this.strain=strain;
}
publicDog(String name,int love,int health,String strain){
//显示调用父类的带参构造
super(name,love,health);
this.strain=strain;
}
publicDog(){
}
}
3. 编写子类Penguin类:
publicclassPenguin extends Pet{
// 性别
privateString sex;
publicPenguin(String name,int love,int health,String sex){
//显示调用父类的带参构造
super(name,love,health);
this.sex=sex;
}
publicPenguin(){
}
publicString getSex() {
returnsex;
}
publicvoidsetSex(String sex) {
this.sex = sex;
}
}
4. 测试程序
Dog dog=newDog("皮皮",20,90,"拉不拉多犬");
dog.print();
Penguin peng=newPenguin("粒粒",30,92,"Q妹");
peng.print();