一、抽象类与抽象方法
1、抽象类介绍
抽象方法:
用关键字abstract修饰一个方法,并且只“声明”而不具体实现这个方法,就可以生成一个抽象方法。
抽象方法的定义格式:
public abstract 返回值类型 方法名(参数列表);
public abstract double perimeter();
抽象类:
如果一个类中存在抽象方法,那么该类就必须声明为抽象类。
抽象类给抽象方法提供存活空间
抽象类的定义格式:
public abstract class 类名{}
public abstract class Shape{}
代码示例:
package com.mec.about_abstract.core;
/*
抽象类: 理解层面来说, 就是把像的部分和相似的部分, 抽取到一个父类中 (共性行为向上抽取)
当行为被抽取到父类中之后, 发现这个行为在父类中描述不清了.
且该行为还是子类必须要做的事, 就将其定义为抽象方法.
抽象方法需要存活在抽象类当中.
简单记: 抽象类就是一个特殊的父类, 该父类中可以定义抽象方法.
*/
public abstract class Shape {
protected String name;
public Shape() {
}
public Shape(String name) {
this.name = name;
}
public abstract double perimeter();
public abstract double area();
}
2、抽象类的注意事项
-
抽象类不能实例化,因为本类中存在为实现的方法
-
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
-
可以有构造方法
-
由抽象类派生出的子类,如果依然没有实现其抽象方法,则,这个子类也一定是抽象类。
3、抽象类中常见问题解答
问题1: 抽象类为什么不能实例化(创建对象)?
一旦允许创建对象, 就可以调用内部没有方法体的抽象方法了.
问题2: 抽象类既然不能创建对象, 那构造方法有什么作用?
交给子类去访问的。创建子类对象,会调用父类的构造对父类中私有的成员变量进行赋值。
问题3: 抽象类可以没有抽象方法吗?
可以没有抽象方法, 但有抽象方法的类一定是抽象类。
问题4: 作为抽象类的子类, 需要注意什么?
-
必须重写所有的抽象方法.
-
将自己也变成一个抽象类 (不推荐,因为这样做没有意义)
4、抽象类编程核心思想解读
抽象类由“确定的成分”和“不确定的成分”两部分组成。
“确定的成分”通常是那些类中固定的,固有的和确定的成员变量,方法组成;这些成分在抽象类中实现,再用派生的方式让子类继承,从而实现了“代码复用”。
“不确定的成分”是那些类彼此有相同、又不同的部分。相同点在于,这些类中都存在这些成分;不同点在于,这些成分的具体实现方法不同(代码逻辑不同)。
如果一个类中存在这么一种功能(方法):这个功能不是有这个类实现,或者说,它无法确定其实现的过程,但是,又要用到这个功能以便实现其他“确定”的功能,那么,就可以把这个“不确定”、当前无法实现的功能声明为抽象方法,以待其派生类实现它。