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

    接口

    接口不是类,尤其不能使用new运算符实例化一个接口:

    x = new Comparable(...) ; // Comparable是一个接口 ,这样是错误的
    

    然而,尽管不能构造接口的对象,却能声明接口的变量:

    Comparable x;//OK
    

    接口变量必须引用实现了接口的类对象:

    x = new Employee(...); //OK   public class Employee implements Comparable
    

    与可以建立类的继承关系一样,接口也可以被扩展.这里允许存在多条从具有较高通用性的接口到较高专用性的接口的链.例如:

    public interface Moveable{
          void move(double x,double y);
    }
    

    然后,可以以它为基础扩展一个叫powered的接口:

    public interface Powered extends Moveable{
          double mile();
    }
    

    虽然在接口中不能包含实例域或静态方法,但却可以包含常量.例如:

    public interface Powered extends Moveable{
          double mile();
          double SPEED = 95;  // a public static final constant
    }
    

    与接口的方法都自动被设置为public一样,接口中的域将被自动设置为public static final

    一个类只能继承一个父类(java是单继承语言),但是一个类可以实现多个接口

    class Employee implements Cloneable,Comparable
    

    接口和抽象类

    对抽象类概念不懂的,可以查看我前面写的文章,这里就不重复介绍了

    了解完抽象类和接口外,可能你会有一个疑问,为什么java程序设计语言要不辞辛苦地引入接口的概念?为什么不直接把Comparable直接设计后才能如下所示的抽象类

    abstract class Comparable{
          public abstract int compareTo(Object other);
    }
    

    然后,Employee类再直接扩展这个抽象类,并提供compareTo方法的实现:

    class Employee extends Comparable{
          public int compareTo(Object other){...}
    }
    

    非常遗憾,使用抽象类表示通用属性存在这样一个问题:每个类只能扩展一个类.假设Employee类已经扩展了一个类,例如:Person,它就不能再像下面一样扩展第二个类

    class Employee extends Person, Comparable // Error
    

    但是每个类可以像下面一样扩展多个接口

    cl ass Employee extends Person implements Comparable // OK
    
  • 相关阅读:
    TypeScript reflect-metadata 结合方法装饰器实现的一个自定义语法检查的例子
    使用 TypeScript 自定义装饰器给类的方法增添监听器 Listener
    爬取本blog所有文章链接
    90分钟掌握Python多线程爬虫(全程实战)
    python学习笔记
    Python零基础爬虫教学(实战案例手把手Python爬虫教学)
    开发,功能测试点,注意
    workerman
    tp6 文档
    公共方法
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/13720535.html
Copyright © 2011-2022 走看看