• 继承和多态


    封装回顾

    概念:属性私有化(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());
    
        }   
    }
    
    ljm要加油
  • 相关阅读:
    nginx限流方案的实现(三种方式)
    Pthreads并行编程之spin lock与mutex性能对比分析(转)
    C/C++中float和double的存储结构(转)
    list_entry(ptr, type, member)——知道结构体内某一成员变量地址,求结构体地址
    stderr和stdout详细解说(转)
    结构体内存分配理解
    C中的C文件与h文件辨析(转)
    访问vector元素方法的效率比较(转)
    linux c中select使用技巧——计时器(转)
    thread::id
  • 原文地址:https://www.cnblogs.com/ljmmm1/p/14269067.html
Copyright © 2020-2023  润新知