zoukankan      html  css  js  c++  java
  • 抽象类 与 接口

            先从设计的需求来考虑为什么需要这两种技术。

            抽象类,首先是类。类是对对象的定义,表示某对象具有特定的属性和行为,比如狗都会狗叫,狗叫是具体的行为。抽象类正如其名,表示对对象的抽象,和普通类用于表示具体的对象是不一样的,比如狗和猫都会叫,但叫的方式是不同的。由于不能表示具体的对象物,所以将其实例化是没有意义的。
            抽象类使用原则:
    • 抽象类一定不会被实例化(设计需求和语法)
    • 抽象类一定会被继承(设计需求)
    • 抽象类一般都包含抽象方法(设计需求)
    • 子类如果没有 override 抽象类的所有抽象方法,那么子类仍然为抽象类(设计需求和语法)
    • 抽象类用 abstract 修饰,不能和 final 同时存在(设计需求语法)
    • 抽象方法 用 abstract 修饰,不能和 private static final native 同时存在(设计需求语法)
            可以看到,语法的限制也是为了保证设计需求的实现。
            抽象类的使用例子:
    abstract class Animal(){
        abstract void cry();
    }
    
    class Dog extends Animal(){
        @Override
        void cry(){
        }
    }
    
    class Cat extends Animal(){
        @Override
        void cry(){
        }
    }
     
     
            接口,则用于表示行为的集合。在具体的使用场合中,一个类如果继承了抽象类,就表示这个类是这个抽象类的特例;而一个类实现了一个接口,则表示这个类有这个接口中定义的行为。一个是“是”,一个是“有”,这也是为什么在 java 中的继承都是单继承,而实现则可以是多实现。
            比如门,有的有门铃,有的没有门铃,这就是有的关系,按门铃这个操作,使用接口就比较合适。
            接口使用规则:
    • 接口中的属性全部被 public static final 修饰,所以无需显示写出
    • 接口中的方法全部被 public abstract 修饰,所以无需显示写出
    • 一个类要实现某个接口,就要实现这个接口中的全部方法
    • 一个类可以同时实现多个接口
            接口 和 抽象类同时使用的例子:
     
    abstract class Door(){
        abstract void open();
    }
    
    interface Alarm(){
        void alarm();
    }
    
    class NormalDoor extends Door(){
        @Override
        void open(){
        }
    }
    
    class AlarmDoor extends Door implements Alarm(){
        @Override
        void open(){
        }
    
        @Override
        void alarm(){
        }
    }
     





  • 相关阅读:
    单链表的反转
    .tar.xz压缩文件的解压
    leetcode Excel Sheet Column Number python
    leetcode Excel Sheet Column Title python
    leetcode Largest Number python
    leetcode Majority Element python
    leetcode Word Break python
    sed命令导致rc.local软链接失效
    Steam内存测试工具
    Ceph pg_num计算
  • 原文地址:https://www.cnblogs.com/JonnyLulu/p/4187123.html
Copyright © 2011-2022 走看看