继承和多态

封装回顾

概念:属性私有化(private),提供公共(public)setter&getter方法访问私有属性。
目的:提高数据的安全性。(额外进行控制)
抽象

前提:具有相同属性和方法。
场景:对象 -> 类 、类 -> 父类
继承

父类:类抽象的到父类,必须满足is-a关系。

都是类(class),父类更抽象、子类更具体。

继承:将相同的属性和方法抽象到父类中,子类继承(extends)父类,子类就可以继承父类中public+protected类型的的属性和方法。

继承优点:提高维护性和扩展性。

子类会默认调用父类无参数的构造方法。

重写:父子类中,方法名、参数、返回值都相同。权限不能缩小。

多态
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

eg:

public class Dog extends Pet{
    public Dog(String kind){
        super(kind);//调用父类构造方法
    }

    @Override
    public String bark(){
        return getName() + "在叫:汪汪";
    }

    public void loolDoor(){
        System.out.println(getName() + "在看门");
    }

}
public class Cat extends Pet{
    public Cat(String kind){
        super(kind);
    }

    @Override
    public String bark(){
        return super.bark() + "喵喵";
    }

    public void catchMouse(){
        System.out.println(getName() + "在捉老鼠");
    }

}
public class Pet {
    //属性
    private String name;
    private int age;
    private String sex;
    private String kind;

    //初始化块
    {
        this.name = "未知";
    }

    //构造方法(方法重载)
    public Pet(String kind) {
        this.kind = kind;
    }

    //成员方法
    public void eat(String food){
        System.out.println(name + "在吃" + food);
    }

    public void sleep(){
        System.out.println(name + "在睡觉");
    }

    public String bark(){
        return name + "在叫:";
    }

    //getter&setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age >= 20 || age < 0){
            System.out.println("数据错误!");
        }else{
            this.age = age;
        }
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getKind() {
        return kind;
    }
}
public class Master {
    public static void main(String[] args) {
        Dog pet1 = new Dog("金毛");
        pet1.setName("旺财");
        pet1.eat("骨头");
        ((Dog)pet1).loolDoor();
        System.out.println(pet1.bark());

        Cat pet2 = new Cat("波斯");
        pet2.setName("咪咪");
        pet2.eat("鱼");
        ((Cat)pet2).catchMouse();
        System.out.println(pet2.bark());

    }   
}
posted @ 2021-01-12 20:16  0x3fffffff  阅读(63)  评论(0编辑  收藏  举报