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

    抽象类

      使用abstract关键字进行修饰的类即称为抽象类,主要是针对当前类在当前阶段暂时不清楚某一功能的具体实现,但知道其基本声明定义(该声明定义将会被后续其他子类所实现并引用),则此时可在该类中进行定义为抽象方法(也就是使用 abstract 进行修饰的方法为抽象方法,且该方法是没有方法体的,不能有方法体的大括号),子类对该方法进行重写称为实现。

     

    abstract关键字和抽象类的注意事项:

    1)   abstract既可以修饰类,也可以修饰方法,但是不能修饰属性。

    2)   abstract不能修饰构造方法,因为子类不能对父类的构造方法进行实现

    3)  抽象类没有构造方法,是不能够创建对象的,不能存在实例(抽象类不是类)

    4)  抽象类具有多态的特征,如果一个抽象类被一个类继承,该类必须将抽象类中的方法全部实现(包括所有继承的未被实现的方法);如果不知道怎么实现,可以使用空实现,或者也可以将该类抽象化。

    5) 如果一个类中存在抽象方法,那么这个类必然为抽象类。

    6) 在一个抽象类中可以不存在抽象方法,一个抽象类中也可以存在多个抽象方法

    7) 抽象方法是不能使用private进行修饰的,只能使用public和protected修饰,便于继承后来被实现。

     

    接口:

      使用interface进行修饰,可以当做一个“类”(类型)。没有class修饰符,只能使用public和default进行修饰。

       一个JAVA接口是一些方法特征的集合,但没有方法的实现。JAVA接口中定义的方法在不同的地方被实现,可以具有完全不同的行为。

    面向接口的编程就意味着:开发系统时,主体构架使用接口,接口构成系统的骨架。这样就可以通过更换实现接口的类来更换系统的实现。

     

    常量是一种标识符,它的值在运行期间恒定不变。常量标识符在程序中只能被引用,不能被重新赋值。

    由于JAVA接口中声明的变量在编译时会自动加上public static final 的修饰符,也就是说,自动声明为常量,因而JAVA接口通常是存放常量的最佳地点

     

    接口与抽象类的区别

    1)  抽象类中可以存在抽象方法,也可以存在具体方法,但是接口中的方法只能是抽象方法(接口的方法默认为抽象的,可以省略abstract,但是抽象类中必须使用abstract关键字)

    2)  含义定义不同:接口使用关键字interface修饰,抽象类使用class

    3)  接口的实现使用implements关键字,叫做类实现接口(接口只能够被类实现),抽象类使用extends进行单继承

    4)  抽象类只有单继承,不存在多继承;接口可以存在多继承,接口与接口之间用逗号隔开

    5) 一个抽象类只可以继承某一个类,同时还可以实现多个接口;一个接口可以继承多个接口

    6) 抽象类中的属性或变量可以不进行初始化,但是接口中的变量和属性必须进行初始化,且不能够被覆写(接口中的变量或属性全部都定义声明为常量,默认省略了static final这两个修饰符,且只能用public进行修饰;抽象类中的属性可以存在私有的,而接口中不能存在)

     

    接口与抽象类的相同点

    1)  定义声明的所有抽象方法最终都必须被实现(使用空实现和abstract)(如果具有其中某方法不清楚如何实现的话则可以将当前的接口或者抽象类的子类再次被定义为抽象类)

    2)  抽象类和接口都不能创建对象,不存在实例

    3) 抽象类和接口都具有多态的特征

    4) 抽象方法都不能使用private进行修饰

     

     接口实现多态性:

      继承是通过几个不同的子类重写父类的同一个方法来体现的,那么可以说成就是通过实现接口并覆盖接口中同一方法的不同的类体现的。

          在接口的多态中,指向接口的引用必须是指定实现了该接口的一个类的实例,在运行时根据实例对象引用的实际类型来执行对应的方法。

          类的继承都是单继承,只能为一组相关的子类提供一致的服务。但是接口可以是多继承,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务。所以接口相对于继承来说有更好的灵活性。

     

     

  • 相关阅读:
    HTML5之画布的拖拽/拖放
    HDU 4028 The time of a day STL 模拟题
    java 使用htmlunit模拟登录爬取新浪微博页面
    【java.lang.UnsupportedClassVersionError】版本不一致出错
    Unsupported major.minor version 52.0
    java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal问题解决
    htmlunit抓取js执行后的网页源码
    Maven添加本地依赖
    htmlunit爬取js异步加载后的页面
    HtmlUnit爬取Ajax动态生成的网页以及自动调用页面javascript函数
  • 原文地址:https://www.cnblogs.com/zzp-biog/p/9851905.html
Copyright © 2011-2022 走看看