zoukankan      html  css  js  c++  java
  • 抽象类和接口的异同

    一、相同点

      抽象类与接口都可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。从这个角度来讲,接口可以看作一种特殊的“抽象类”。

    二、不同点  

      1、抽象类和接口采用完全不同的语法来表示,两者的设计理念也是不同的。

      2、一个父类只能有一个直接父类,但可以通过implements实现多个接口。  

      3、抽象类利于代码复用,接口利于代码的扩展和维护。

      4、对于继承抽象类的子类来说,符合is a 的关系,而对于实现接口的子类来说,符合has a 的关系。接口代表一种能力。

      5、接口是公开的,里面不能有私有的方法或变量,抽象类可以有私有的方法和私有的变量。

      6、实现接口,一定要实现接口里所有的方法,实现抽象类,可以选择性的重写需要用到的方法。

    三、接口相对于抽象类的优势

      1、接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。

        2、一个父类只能有一个直接父类,但可以通过implements实现多个接口。

        3、通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

    四、接口的劣势

        就是接口所定义的方法和属性只能相对于继承它的类型(除非在继承类中修改接口定义的函数标示),那么对于多层继承关系的时候,光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话,首先不说编写代码比较繁琐,有时候执行的结果还是错误,尤其当子类型对象隐式转换成基类对象进行访问的时候。

  • 相关阅读:
    MYSQL 使用DBI
    mysql 更改数据目录
    Error Code: 1360
    org.hibernate.exception.GenericJDBCException: Could not open connection
    Error: Dynamic is undefined
    Unhandled event loop exception No more handles
    Count:858org.apache.jasper.JasperException: Unable to compile class for JSP
    Mysql --skip-grant-table
    第24章-启动 停止 和配置mysql
    Linux 6.2 x86_64 安装ipvs
  • 原文地址:https://www.cnblogs.com/alexanderthegreat/p/6699254.html
Copyright © 2011-2022 走看看