java的抽象类和接口

java的抽象类和接口,第1张

java的抽象类和接口 抽象类

在继承的层次结构中,每个新子类都使类变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。但有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)。
简而言之,抽象类就是在一个父类中只进行定义而不进行实例化应用的一个类型。其实例化取决于对象的类型,例如在GeometricObject类中定义getArea()和 getPerimeter(),但这两种方法的应用取决于对象的类型(三角形,矩形……)
如图所示的案例:

getArea(),getPerimeter()都是父类抽象类GeometricObject的抽象方法,在Runner类中仅仅只是定义。它们的实例化就需要取决于子类的类型,并且在子类中调用。

抽象类和常规类很像,但是不能使用 new *** 作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含抽象方法的类必须声明为抽象类。
抽象类的构造方法定义为 Protected, 因为它只被子类使用。创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。
抽象类 GeometricObject 为几何对象定义了共同特征(数据和方法 ),并且提供了合适的构造方法。
使用抽象类可以实现根据子类对象类型而且决定调用哪一种方法。

  • 抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。换句话说,在抽象类扩展的非抽象子类中,必须实现所有的抽象方法。还要注意到,抽象方法是非静态的。
  • 抽象类是不能使用 new *** 作符来初始化的。但是,仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用。例如,CeometricObject 类的构造方法在Circle 类和 Recfange 类中调用。
  • 包含抽象方法的类必须是抽象的。但是,可以定义一个不包含抽象方法的抽象类。在这种情况下,不能使用 new *** 作符创建该类的实例。这种类是用来定义新子类的基类的。
  • 子类可以覆盖父类的方法并将它定义为 abstract。这是很少见的,但是它在当父类的方法实现在子类中变得无效时是很有用的。在这种情况下,子类必须定义为abstract。
  • 即使子类的父类是具体的,这个子类也可以是抽象的。例如,Object 类是具体的,但是它的子类如 CeometricObject 可以是抽象的。
接口

在 Java 中,接口被看作是一种特殊的类。使用interface关键字定义接口。就像常规类一样,每个接口都被编译为独立的字节码文件。使用接口或多或少有点像使用抽象类。例如,可以使用接口作为引用变M的数据类型或类型转换的结果等。与抽象类相似,不能使用 new *** 作符创建接口的实例。
可以使用 Edible 接口来明确一个对象是否是可食用的。类与接口的连接需要使用implements来连接。类和接口之间的关系称为接口继承。因为接口继承和类继承本质上是相同的,所以我们将它们都简称为继承。
简而言之,接口一个抽象方法和变量名的一个定义集合。

例:compareble类
Comparable 接口定义了 compareTo 方法,用于比较对象。
假设要设计一个求两个相同类型对象中较大者的通用方法。这里的对象可以是两个学生、两个日期、两个圆、 两个矩形或者两个正方形。为了实现这个方法,这两个对象必须是可比较的。因此,这两个对象都该有的共同方法就是 comparable (可比较的)。为此,Java提供了 Comparable 接口。
被比较的双方都应该继承Compara接口,并且通过compareTo方法实现比较。
compareTo 方法判断这个对象相对于给定对象 o 的顺序,并且当这个对象小于、等于或大于给定对象 o 时,分别返回负整数、0或正整数。

接口与抽象类

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5677631.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存