zoukankan      html  css  js  c++  java
  • java 基础(抽象类与接口)

    抽象方法

    声明:仅进行声明,没有方法体。

    abstract  void f();
    

    抽象类:包含抽象方法的类--抽象类。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。并且抽象类可以有成员变量和普通的成员方法。

    如果继承一个抽象类,并想创建该类的对象,那么就必须为基类中所有抽象方法提供方法定义。如果不这样做,那么导出类便也是抽象类,并且,编译器会强制我们用abstract关键字来限定这个类。

    使用抽象类 注意以下几条:

    • 抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

    • 抽象方法必须由子类来进行重写。

    • 只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

    • 抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

    • 子类中的抽象方法不能与父类的抽象方法同名。

    • abstract不能与final并列修饰同一个类。

    • abstract 不能与private、static、final或native并列修饰同一个方法。、

    抽象类和普通类的主要有三点区别:

      1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

      2)抽象类不能用来创建对象;

      3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

      在其他方面,抽象类和普通的类并没有区别

    接口:

    interface 关键字产生的完全抽象的类,接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
    实现接口的实现类通过 implement 关键字实现接口中所有的方法, java不支持多继承,但是接口是抽象类的延伸,可以通过多个实现类实现接口来填补抽象类的不足

    接口继承的关系如下:

    
    class ClassName implements Interface1,Interface2,[....]{
    }
    
    

    在使用接口过程中需要注意如下几个问题:

    • 接口 interface 前可以用public 修饰,不添加public的情况则只有包访问权限。所以当要实现一个接口时,没有public修饰时,也默认为public

    • 接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

    • 接口中不存在实现的方法。

    • 实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

    • 不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

    • 在实现多接口的时候一定要避免方法名的重复。

    其中对于第2点说明,接口的成员特点:

    A:成员变量 只能是常量。默认修饰符 public static final
    B:成员方法 只能是抽象方法。默认修饰符 public abstract

    如图报错是因为接口中成员变量自动为static final 修饰 所以 要赋予初始值


    改为如下即不报错

    抽象类与接口的区别:

    1.语法层面上的区别

    • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

    • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

    • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    2.设计层面上的区别

    • 抽象层次不同。抽象类是对类抽象,而接口是对行为的
      抽象。
    • 跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。
    • 设计层次不同。对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。

    文章借鉴:
    https://www.cnblogs.com/dolphin0520/p/3811437.html
    https://blog.csdn.net/chenssy/article/details/12858267

  • 相关阅读:
    汇编代码中db,dw,dd的区别
    利用汇编详解栈结构
    80X86指令总结
    【原创】自己动手写的一个查看函数API地址的小工具
    【初学破解】暴力破解绕过程序认证
    OD基本汇编指令
    排序算法
    数据聚类算法-K-means算法
    数据预测算法-ARIMA预测
    数据预测算法-指数平滑法-1
  • 原文地址:https://www.cnblogs.com/gloria-liu/p/10222520.html
Copyright © 2011-2022 走看看