• Java关于接口


    /**
     * 关于接口:
     *    1、接口是一种"引用数据类型",被编译之后也是一个*.class字节码文件。
     *    2、接口是完全抽象的。(抽象类是半抽象的)也可以说接口是特殊的抽象类。
     *    3、接口的定义:[修饰符列表] interface 接口名{}
     *    4、接口支持多继承,也就是说一个接口可以继承多个接口。例如:interface z implements 接口名1,接口名2,...
     *    5、接口中只包含两部分内容,一部分是:常量,一部分是:抽象方法,除此之外没有其他内容。
     *    6、接口中的所有元素都是public修饰的。(都是公开的)
     *    7、由于接口中的方法都是抽象方法,所以定义抽象方法时public abstract修饰符是可以省略的,在编译时会自动加上。
     *    8、由于接口中的方法都是抽象方法,所以接口中的方法不能有方法体。
     *    9、在接口中修饰常量的修饰符public static final可以省略,在编译时会自动加上。
     *    10、类和类之间叫继承使用关键字"extends",类和接口之间叫实现使用关键字"implements"。
     *    11、(五颗星*****)当一个非抽象的类实现接口,必须将接口中的所有的抽象方法全部实现/覆盖/重写
     *    12、在编程时尽量使用父类型引用指向子类型对象(也就是多态)
     *    13、一个类也可以同时实现多个接口,实现接口就类似于继承。例如:class 类名 implements 接口名1,接口名2,接口名3,...
     *    14、继承和实现都存在的话,extends关键字在前,implements关键字在后。
     *    15、接口在开发中的作用类似多态,面向接口编程降低程序的耦合度,提高程序的扩展力。符合OCP的开发原则。
     *        接口在开发中的作用总结一句话就是:"解耦合"。
     *    16、类型与类型之间的关系:
     *        * is a    Cat is a Animal   继承关系   class Cat extends Animal
     *        * has a   I has a Pen       关联关系   class I {
     *                                                  B b
     *                                               }
     *        * Cooker like a FoodMenu  实现关系  class Cooker implement FoodMenu
     *
     *    17、抽象类和接口有什么区别:(语法上)
     *        * 抽象类是半抽象的,接口是完全抽象的
     *        * 抽象类中有构造方法,接口中没有构造方法
     *        * 类和类之间只能单继承,接口和接口之间支持多继承,
     *        * 一个类可以同时实现多个接口,一个抽象类只能被一个类继承。
     *        * 抽象类中既可以有抽象方法也可以有非抽象方法,接口中只允许有常量和抽象方法
     *        * 今后接口用的比抽象类要多。接口一般都是对"行为"的抽象。
     */
    public class interfaceTest {
        public static void main(String[] args) {
            Flyable f1 = new Cat();//多态(父类型引用指向子类型对象)
            f1.fly();//一只会飞的猫!
            Animal a = new Snake();//多态(父类型引用指向子类型对象)
            Flyable f2= new Pig();//多态(父类型引用指向子类型对象)
            f2.fly();//一头会飞的猪!
            Flyable f3 = new Fish();//多态(父类型引用指向子类型对象)
            f3.fly();//一条会飞的鱼!
        }
    }
    //父类
     class Animal{
    
     }
    // 接口(飞翔接口)
     interface Flyable{
        void fly();
     }
    // 猫实现了飞翔接口,就会飞。
     class Cat extends Animal implements Flyable{
        public void fly(){
            System.out.println("一只会飞的猫!");
        }
    }
    //蛇类 如果不想让它飞,就不需要实现飞翔接口
    class Snake extends Animal{
    
    }
    //猪类 如果想让它飞,就去实现飞翔接口
    class Pig extends Animal implements Flyable{
        public void fly(){
            System.out.println("一头会飞的猪!");
        }
    }
    //鱼类 如果不写继承,会默认继承Object类
    class Fish implements Flyable{
        public void fly(){
            System.out.println("一条会飞的鱼!");
        }
    }
  • 相关阅读:
    【SymbolicLink】利用软连接将已安装程序搬迁到其他盘符
    RuntimeError: CUDA unknown error #49081
    架构每日一学 3:架构师六个生存法则之一:如何找到唯一且正确的架构目标?(二)
    Abnova丨Abnova 抗独特型单克隆抗体的分类和特色
    el-table嵌套el-form表单的案例
    24、wpf之布局(二)
    【嵌入式开发学习】__如何将BootLoader与APP合并成一个固件
    知识产权之围:跨境电商卖家的法律防线
    传统机器学习笔记4——决策树
    Linux上通过mysqldump命令实现自动备份
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/128095732