Java抽象类

余生颓废 提交于 2019-12-26 20:21:41

什么是类?

具有相同特征和行为的事物的统称,称为类。

类有什么作用?

类的作用是创建对象。

类里可以包含哪些内容?

  1. 属性(静态属性,非静态属性)
  2. 方法(静态方法,非静态方法)
  3. 构造器
  4. 代码块(静态代码块,非静态代码块)

什么是抽象类?

但在某种情况下, 父类只能知道子类应该具备一个什么的方法, 但是父类自己实现了没有意义而且父类又能知道子类如何实现该方法.

Java提供了解决方案:

Java中 允许父类只提供一个方法声明, 不提供具体的实现,具体的实现,交给子类来完成, 该方法称为是抽象方法.

拥有一个或多个抽象方法的类, 称为是抽象类.

抽象类和普通的类非常相似。普通类能包含的内容,抽象类都可以包含。

唯一的不同点就是,抽象类不能创建对象

abstract关键字

A, abstract 修饰的类称为是抽象类

访问控制符 abstract class 类名{

}

B, abstract 修饰的方法为抽象方法

访问控制修饰符 abstract 返回值类型 方法名(参数列表)

C,拥有一个或多个抽象方法的类必须是抽象类

D,抽象类中可以没有抽象方法

E,抽象类中可以有非抽象方法

F,抽象类不能创建实例, 必须被继承

G,子类继承自抽象类, 要不重写抽象方法, 要不子类仍然是抽象类

如何创建一个抽象类?

创建抽象类, 只需添加一个关键字abstract.

语法格式如下:

public abstract class Shape{
    ....
}

抽象类的特点:不能创建对象,不能创建对象,不能创建对象

抽象类有什么用?

类不就是用来创建对象的吗?抽象类不能创建对象有什么用?

抽象类的最大价值就是被子类继承

抽象类可以定义公共的信息,例如 形状类的 周长,面积,边的个数。

哪些信息写到抽象类里?

需要有某些方法,但是这个类(父类)实现这些方法没有意义,不写方法体还会报错,这样的方法要写在抽象类里,而且这个方法要声明为抽象方法。

一个类中如果有抽象方法, 这个类必须定义为抽象类!

思考一下为什么要定义成抽象类?

假如包含抽象方法的类不定义成抽象类,那它就是一个普通类,普通类可以创建对象,创建完对象以后,对象可以调用这个类方法。万一调用到了这个抽象方法会怎么样?会报错!为什么会报错,因为这个抽象方法没有方法体。为了避免这个问题,不能让含有抽象方法的类去创建对象。从语法上,怎么样才能让一个类不能创建对象呢?定义成抽象类。

抽象方法

什么是抽象方法?

一个方法如果你只想声明一下,不想去实现它(本质上不是你不想实现它,而是你不知道应该怎么去实现它,这个时候应该交给子类去实现),这个方法可以定义为抽象方法。

抽象方法的特点:

​ 只有方法的声明,没有方法体。

如何定义抽象方法:

​ 在方法的返回值之前添加abstract关键字。

语法格式如下:

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

一旦一个方法定义为抽象方法,你不能去实现。想实现都不能实现。

abstract 不能和哪些关键字同时出现?

private

abstract不能和private同时出现。

private修饰的方法是私有的,子类根本就不知道有这个方法。

abstract修饰的方法是希望子类去实现。

static

abstract不能和static同时出现。

abstract修饰的方法只有声明,没有实现(没有方法体)。

static 不创建对象,用类名就可以调用。

虽然抽象类不能创建对象,但是 static修饰的方法可以不用对象去调用,用类名可以直接调用,那调用了一个没有实现的方法会怎么样呢?会报错。怎么办?避免调用,所以说抽象方法不能定义为static。

final

abstract不能和final同时出现。

abstract修饰的方法希望子类去实现的。

final修饰的方法表示已经是最终实现了,子类不能重写了。

抽象类的注意事项

  1. 如果一个类继承了抽象类,这个类应该实现抽象中定义的全部的抽象方法。例如:Triangle继承了抽象类Shape,要实现Shape中定义的全部抽象方法。
  2. 如果一个类继承了抽象类,但是这个类并没有实现全部的抽象方法,意味着这个类包含抽象方法,那这个类也必须定义为抽象类。它尚未实现的方法教给它的子类去实现。

核心要点

  1. 抽象方法 只有方法的声明,没有方法体。
  2. 包含抽象方法的类必须定位抽象类。
  3. 抽象类不能创建对象。
  4. abstract不能和static、final、private中任何一个同时出现。

测试题

  1. 抽象类中可以不包含抽象方法吗?

    对的

  2. 抽象方法可以不在抽象类中吗?

    不可以

  3. 抽象类可以定义为私有类吗?

    不可以 abstract不能和private同时出现

思考

1, 为什么没有多继承, 但是又用接口来实现了多继承的功能?

2, 多接口中方法可以重名, 但是属性重名有问题吗?

3, 接口能够继承类吗?

4, 接口能继承抽象类吗?

5, 接口能继承接口吗?

6, 接口能多继承接口吗?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!