13、Java 基础-抽象类、接口

    xiaoxiao2022-07-04  174

    一、抽象类

    使用abstract修饰符修饰的类。

    官方点的定义就是:如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。

    抽象类在实际应用中,更多的是因为类中有抽象方法。抽象方法:只声明,不实现。具体的实现由继承它的子类来实现。实际点就是:被abstract修饰的方法,只有方法名没有方法实现,具体的实现要由子类实现。方法名后面直接跟一个分号,而不是花括号。例如:

    public abstract int A();

    一个类中含有抽象方法(被abstract修饰),那么这个类必须被声明为抽象类(被abstract修饰)。

    public abstract class Bird{ // 定义一个抽象类 abstract void walk(); } public abstract class Airplane{ // 定义一个抽象类 abstract void run(); }

    和普通类的区别主要有:

    抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public,class面前加abstract标识抽象类不能用来创建对象如果一个类继承于一个抽象类,则子类必须实现父类的所有抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。不具有实现接口功能

    相同点大致有:

    都有静态变量和静态方法可以有非静态的变量和方法可以继承

    二、接口

    官方定义:接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。

    从定义上看,接口是个集合,并不是类。类描述了属性和方法,而接口只包含方法(未实现的方法)。接口和抽象类一样不能被实例化,因为不是类。但是接口可以被实现(使用 implements 关键字)。实现某个接口的类必须在类中实现该接口的全部方法。虽然接口内的方法都是抽象的(和抽象方法很像,没有实现)但是不需要abstract关键字。

    接口中没有构造方式(因为接口不是类)接口中的方法必须是抽象的(不能实现)接口中除了static、final变量,不能有其他变量接口支持多继承(一个类可以实现多个接口)

    和抽象类的区别为:

    抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;抽象类可以有静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法;一个类只能继承一个抽象类,而一个类却可以实现多个接口。抽象方法比接口速度快。

    举例:鸟和飞机都具有飞的功能,但是他们并不是同一类事物,所以对于这中“功能”的抽象,我们应该用接口实现,虽然我们定义成抽象类也能实现。

    public interface Fly{ // 定义一个接口 void fly(); } public abstract class Bird{ // 定义一个抽象类 abstract void walk(); } public abstract class Airplane{ // 定义一个抽象类 abstract void run(); }

    同时,鸟有自己的走方法,飞机有跑方法,这是这一类事物的抽象,子类都具有,所以我们此时定义为抽象类最合适不过 我们再看燕子和战斗机的类:

    public class Swallow extends Bird implement Fly{ Swallow类继承了Bird类,并对Fly接口进行了实现 void fly(){}; void walk(){}; } // Battleplaneextends继承了Airplane类,并对Fly接口进行了实现 public class Battleplaneextends Airplane implement Fly{ void fly(){}; void run(){}; } 抽象类侧重某一类事物抽象,接口侧重某一种功能抽象

    更多代码示例地址:Day13

    最新回复(0)