美文网首页
面向对象:Java的接口与抽象类

面向对象:Java的接口与抽象类

作者: alex很累 | 来源:发表于2021-12-05 16:44 被阅读0次

    一、抽象类

    1.定义和使用格式
    抽象方法:一种特殊的方法,只有声明,而没有具体的实现。
    抽象类:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,在类前用abstract修饰。

    public abstract class ClassName {
        abstract void fun();
    }
    

    2.特性
    (1) 抽象类不允许被实例化,只能被继承。
    (2) 抽象类可以包含属性和方法。方法既可以包含代码实现,也可以是不包含代码实现的抽象方法。
    (3) 子类继承抽象类,必须实现抽象类中所有的抽象方法。如果子类没有实现父类的抽象方法,那么它也要定义为abstract类。

    二、接口

    1.定义和使用格式
    接口:接口是对行为的一种抽象,相当于一组协议或者契约;调用者只需要关注抽象的接口,不需要了解具体的实现。

    public interface InterfaceName {
     
    }
    

    2.特性
    (1) 接口可以有成员变量,但是成员变量只能是public static final类型的。
    (2) 接口只能声明方法,方法不能包含代码的实现。
    (3) 类实现接口的时候,必须实现接口中声明的所有方法。

    三、抽象类和接口的区别

    1. 语法层面
    (1) 抽象类中可以提供成员方法的实现,而接口不行;
    (2) 抽象类的成员变量可以是各种类型的,但是接口中的成员变量只能是public static final类型的;
    (3) 抽象类中可以含有静态代码块和静态方法,而接口不行;
    (4) 抽象类可以含有构造方法,而接口不行;
    (5) 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    2. 设计角度
    抽象类是对成员变量和方法的抽象,是一种 is-a 关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性。

    四、其他

    要“基于抽象而非实现编程”,我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展性、可维护性。

    相关文章

      网友评论

          本文标题:面向对象:Java的接口与抽象类

          本文链接:https://www.haomeiwen.com/subject/ltoixrtx.html