- 继承的步骤
OOP三大特征:封装、继承、多态
继承的概念:提供的一种子类沿用父类通用行为和属性的编码方式
继承的优势:减少代码冗余,进而可以提升代码的可维护性,提升代码可扩展性
继承的实现方式:extends
建议使用的访问修饰符:protected
继承的特点:1、传递性 2、相对性 3、单根性(一个子类有且仅有一个父类)、
继承描述关系:son extends father, son is a father
Super:当前对象的父类对象
This:当前对象
哪些内容不可以继承:
- 子类不能继承父类的构造方法
- 当父类中不存在空参构造方法,那么子类必须显式调用父类构造方法
子类不能继承父类的private修饰的内容(私有的属性和方法)
重写:一般发生继承里面。
特点:发生在父子类之间,方法名称相同,参数列表相同,返回值类型相同 override
访问修饰符子类不能比父类小
继承关系里面:子类实现化过程中,先调用父类构造方法,再调用子类构造方法。要参考子类构造方法被new的时候是否传入参数,如果子类用带参构造方法,调用的父类一定带参数;如果子类不带参数,父类也不会有参数
例一、使用继承优化电子宠物系统
需求说明:继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类。正确使用继承,将Dog类和Penguin类继承Pet类实现宠物自白的输出。(注意:继承的关键字为extends)
package day07.petSystem;
public class Pet {
private String name; //名字
private int healthy; //健康值
private int love; //亲密度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealthy() {
return healthy;
}
public void setHealthy(int healthy) {
this.healthy = healthy;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public void show() {
System.out.println("");
}
}
package day07.petSystem;
/**
* 狗类
*/
public class Dog extends Pet {
public void show() {
this.setName("大黑");
this.setHealthy(98);
this.setLove(99);
System.out.println("宠物的自白:" + "\n我的名字叫" + this.getName() + ",我的健康值是" + this.getHealthy() + ",我和主人的亲密度是" + this.getLove() + "。");
}
}
package day07.petSystem;
public class Test {
public static void main(String[] args) {
Penguin penguin = new Penguin();
penguin.show();
penguin.show1();
Dog dog = new Dog();
dog.show();
}
}
例二、使用super
需求说明:按照super的注意事项:
(1) 使用super关键字,super代表父类对象;
(2) 在子类构造方法中调用且必须是第一句;
(3) 不可以访问父类中定义为private的属性和方法;
package day07.petSystem1;
public class Pet {
public Pet() {
}
public Pet(String name, int healthy, int love) {
System.out.println("父类带参构造方法");
this.name = name;
this.healthy = healthy;
this.love = love;
}
public void show() {
System.out.println("宠物的自白:" + "\n我的名字叫" + this.getName() + ",我的健康值是" + this.getHealthy() + ",我和主人的亲密度是" + this.getLove() + "。");
}
private String name; //名字
private int healthy; //健康值
private int love; //亲密度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealthy() {
return healthy;
}
public void setHealthy(int healthy) {
this.healthy = healthy;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
}
package day07.petSystem1;
public class Dog extends Pet {
public Dog(String name, int healthy, int love) {
//super在构造方法中出现只能是第一行代码
super(name, healthy, love);
System.out.println("子类带参构造方法");
}
}
package day07.petSystem1;
public class Penguin extends Pet{
public Penguin(String name, int healthy, int love) {
//super在构造方法中出现只能是第一行代码
super(name, healthy, love);
System.out.println("子类带参构造方法");
}
}
package day07.petSystem1;
public class Test {
public static void main(String[] args) {
Pet pet=new Pet("贝贝",100,20);
pet.show();
Penguin penguin=new Penguin("多多",100,20);
penguin.show();
Dog dog=new Dog("贝贝",100,20);
dog.show();
}
}