Java基础知识章节梳理(十一)

一. 抽象类

      1. 定义:使用了abstract声明的类叫做抽象类,如果一个类中包含了一个或多个抽象方法,那么这个类就必须声明为抽象类,其格式为:public abstract class 类名{}

(抽象类中不一定有抽象方法,而有抽象方法的一定为抽象类)

      2. 抽象方法

           1) 概念:当一方法没有具体的内容,只有抽象的功能描述,那么这个方法可以写为一个抽象方法

(简单的可以理解成没有功能体的方法都可以看成抽象方法(目前本人是这样理解的))

           2) 格式:public abstract 返回值类型 方法名(参数)

           3) 应用:抽象方法可以理解为是父类对子类提的要求,要求子类必须重写某个方法,不重写语法报错

(抽象类可以理解成抽取子类共有需求(功能)的一个类)

            4) 特点

           a. 抽象类无法直接创建对象,只能被子类继承后,创建子类对象

           b. 抽象类一定是一个父类,因为抽象类是不断抽取共性需求而来的

           c. 抽象类中可以不定义抽象方法,但是有抽象方法的类一定是抽象类

           d. 如果抽象类A定义了一个抽象的a方法,如果B类继承A的的时候,没有重写a方法,B类也必须抽象!

(抽象类不可通过关键字new获取类中的方法或变量,只能通过其子类来使用!抽象只能定义类和方法)

             为了更好理解抽象类,如下图,简单的阐述了抽象类的使用情况:

            父类(员工)为抽象类,里面定义了一个抽象方法(工作),其下面的两个子类(研发部员工和维护部员工),因并没有实现具体的功能体,所以必须定义为抽象类。然后其孙子类(研发部员工和维护部员工各自的子类)继承并各自完成了抽象方法的功能体。


二. 接口

      1. 概念:接口指一堆功能的集合,不涉及具体的功能实现,只有抽象的功能描述(抽象方法)

      2. 定义格式:

           1) 格式:Public interface 接口名{}

           2) 包含成员

                 a. 常量:public static final 常量名=数据值

                      常量只能赋值一次,一旦赋值将不能更改

                 b. 抽象方法

                      public abstract 返回值类型 方法名(参数);

      3. 特点

           a. 接口中只能定义常量和抽象方法,无法定义普通的成员变量和方法

           b. 接口中的方法均为公共访问权限的抽象方法,不写自动加上public abstract

           c. 接口是一种特殊的抽象类,即接口也不可以创建对象

           d. 子类必须覆盖接口中的所有方法,不然子类无法实例化,即子类为抽象类,无法创建对象

(总的来说,接口就是特殊的抽象类,不能定义普通方法和成员也不能通过new获取对象,还有【public abstract】可以省略不写但要记住接口中的方法都是抽象方法)

      4. 类与接口的实现关系

           1) 定义

                 a. 类与接口的关系为实现关系,即类实现接口

                 b. 实现的动作类似继承,只是关键字不同,实现使用 implements

           2) 格式

                 class 类 implements 接口 {重写接口中方法}

           3) 应用

                 a. 在类实现接口后,该类就会将接口中的抽象方法继承过来

                 b. 在具体实现类中重写方法,实现功能,是接口中方法的具体实现

      5. 接口和抽象类的区别

           1) 相同点

                 a. 都位于继承顶端(父类),用于被其他类实现或继承

                 b. 都不能直接创建对象,只能通过子类创建对象

           2) 区别

                 a. 抽象类中可以定义其他方法,可以为其他方法提供具体实现的方法,避免子类重复实现,接口只能包含抽象方法

                 b. 一个类只能继承一个直接父类(可以是抽象类),却可以实现多个接口,接口弥补了Java的单继承

                 c. 抽象类中可以定义成员变量和成员方法,而接口中只能定义常量和抽象方法

                 d. 抽象类中有构造方法可以为成员变量初始化,而接口中没有

      接口与抽象类的区别理解图

(抽象类和接口区别可以往实现的功能方面想,即抽象类是共同的功能,而接口是额外(独有)的功能,推荐多用接口方式(不管是共同的功能还是额外的功能都定义成接口类),因为实现类可以同时实现不同的接口,弥补了java类中不可多继承的缺点)


猜你喜欢

转载自blog.csdn.net/lbusters/article/details/80542335
今日推荐