第二章第三天继承

  1. 继承的步骤

OOP三大特征:封装、继承、多态

继承的概念:提供的一种子类沿用父类通用行为和属性的编码方式

继承的优势:减少代码冗余,进而可以提升代码的可维护性,提升代码可扩展性

继承的实现方式:extends

建议使用的访问修饰符:protected

继承的特点:1、传递性  2、相对性  3、单根性(一个子类有且仅有一个父类)、

继承描述关系:son  extends father, son is a father

 

Super:当前对象的父类对象

This:当前对象

哪些内容不可以继承:

  1. 子类不能继承父类的构造方法
  2. 当父类中不存在空参构造方法,那么子类必须显式调用父类构造方法

子类不能继承父类的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();
    }
}

 

 

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值