java抽象类与接口

    xiaoxiao2021-03-25  159

    l 抽象类

    (1)抽象类可以只包含抽象方法,也可以拥有普通的成员变量或方法,抽象类的子类必须覆盖父类的所有抽象方法

    (2)如果一个类不是抽象类,就不能在该类中定义抽象方法。

    (3)抽象类可以有构造方法,但抽象类不会有实例,也不能直接用构造方法来生成实例,一般可通过其子类进行实例化

    (4)对于类,不能同时用finalabstract说明,对于成员方法,不能同时用staticabstract说明

    Tips:使用final的类不能被继承,使用abstract的类则专门用于被子类继承,因此同时使用finalabstract将产生矛盾。使用static关键字的方法能在不实例化对象时就使用,而使用abstract关键字的方法没有方法体,必须要靠子类进行具体实现,因此一个成员方法同时使用abstractstatic关键字没有任何必要。

    l 接口

    Java语言中,一个类只能有一个父类,但Java提供了接口用于实现多重继承,一个类可以有一个父类,并能实现多个接口,接口是一个特殊的类,由常量和抽象方法组成。

    定义格式:

    public interface 接口名extends 父接口名列表{

       数据类型 变量名=常量值;//常量域声明

       返回类型 方法名(参数列表)[throw 异常列表]//抽象方法声明

    }

    Tips:1)接口具有继承性,一个接口还可以继承多个父接口,父接口间用逗号分隔。

    2)系统默认接口中所有成员变量的修饰都是加上public ,staticfinal的,接口内部的所有成员变量即使不加修饰词,系统也会默认具有public ,staticfinal属性的,因此在接口中定义的变量都是不能改变的值

    (1) 系统默认接口中所有成员方法的修饰都是publicabstract,即使接口内的成员方法不加publicabstract修饰词,系统也默认其具有publicabstract属性。

    (2) 接口只包含常量定义和抽象方法。

    (3) 接口本身具有抽象属性,因此不需要使用abstract关键字,接口的访问控制权限有public和默认权限,不具有protectedprivate权限

    (4) 接口不含构造方法,由于接口没有构造方法,因此不能直接通过接口生成接口的实例对象

    接口的实现:

        格式:class <类名> implements 接口名1,接口名2….

        一个接口可被一个或多个类实现,当一个类实现了一个接口,它必须实现接口中所有的方法,这种实现其实就是方法覆盖,由于方法覆盖不能缩小父类方法的访问权限,而接口内所有的方法均默认public权限,因此实现这些方法时,必须设定访问权限也是public,否则会产生访问权限错误。

       通过使用接口可以来引入多个类的共享常量,接口中定义成员变量的都是加上public ,staticfinal的,因此可以把这些变量都作为常量看待,然后在实现它的类中直接调用。

       接口是可扩展的,可通过运用关键字extends被其他接口继承,因此实现该接口的类,它的语法与继承类是一样的,即当一个类实现了一个继承了另一个接口的接口时,它必须实现接口继承列表中定义的所有方法。如A继承了接口B,接口B继承了接口C,则实现接口A的类需要实现接口AB,C里所有的方法。

    接口与抽象类的区别:

    (1) 接口可以多重继承,而抽象类不可以。

    (2) 抽象类内部可以有成员变量,可以有具体的成员方法,而接口则没有实现的方法,只有常量。

    (3) 接口与实现它的类不构成继承体系,即接口不是类体系的一部分,因此,不相关的类也可以实现相同的接口,而抽象类是属于一个类的继承体系,并且一般位于类体系的顶层。

    (4) 接口能通过实现多个接口实现多重继承,能够抽象出不相关的类之间的相似性,而抽象类不行。

    (5) 在实现运行时多态的机制上,通过设计抽象类,由子类实现父类所定义的方法,也能实现Java动态调度机制,但Java是一种单继承语言,一般情况下,某个具体类可能已经有了一个父类,因此在实现过程中,对一个具体类的可插入型的设计,就变成了对整个等级结构中所有类的修改,而接口的设计避免了这个问题,在一个等级结构中的任何一个类都可以实现一个接口,这个接口会影响此类的所有子类,但不会影响此类的任何父类,此类将不得不实现这个接口所规定的方法,而其子类可以从此类自动继承这些方法,当然也可以选择换掉所有这些方法,或者其中的某些方法,这时候,这些子类具有可插入性。

    Tips:有没有可能某个类实现了一个接口,却没有实现该接口中的所有方法?

    这个类只要符合下列情况之一,就不需要实现接口中的所有方法:

    (1) 在其父类中已经实现了相关的和接口同名的方法

    这个类是抽象类。

    转载请注明原文地址: https://ju.6miu.com/read-1537.html

    最新回复(0)