一、什么是抽象类?
抽象类是啥呢?就是越抽象越累!
抽象类就是:
1、被abstract修饰的类,而被abstract修饰的类呢不能被实例,只能被继承这个称为抽象类 2、还有一个东西叫做抽象方法,同样也是有abstract修饰符,抽象方法呢它没有方法体。
······就长这个亚子:
听起来可能还是很抽象,但是看完第二条就知道抽象类到底是干啥的啦。
二、为什么要有它?
现在我要写一个几何图形类,然后类里面有几何图形的基本属性:长、宽、高还有一个求面积的方法,长宽高还能理解,因为每个图形都会有长宽高。但是这个求面积的方法,我们没办法去确定怎么写它,因为几何图形有圆形、方形、长方形等等等等,每一个图形的面积求法都不同,那么我们在几何图形这个类中写这个方法的时候就很尴尬,这个时候我们就可以把他写成一个抽象的方法,然后让子类(也就是具体的一个图形类(圆形类、方形类等等))去重写它这个方法去求他的面积
这个时候我们就可以把它这个方法写成一个抽象的方法,然后让继承的类去重写这个方法
三、怎么用?
只管给他加上abstract就完事儿了!干就完了!
abstract class Geometry{
//几何图形基本属性
private double length;
private double width;
private double height;
//构造方法
public Geometry(double length, double width, double height) {
this.length = length;
this.width = width;
this.height = height;
}
public Geometry(double length, double width) {
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
//改进它!!!!!
public abstract double calculated_area();
我们写一个子类-长方形类:
//我们写一个长方形类
class rectangle extends Geometry{
public rectangle(double length, double width) {
super(length, width);
}
@Override
public double calculated_area() {
return super.getLength() * super.getWidth();
}
}
再写一个正方形类吧
class square extends Geometry{
public square(double length, double width) {
super(length, width);
}
@Override
public double calculated_area() {
return super.getLength()*super.getLength();
}
}
可以发现都对父类抽象的方法进行了重写.
四、小小的细节
使用的小细节只有亿点点而已
1、抽象类不能被实例化 2、抽象类不一定要包含抽象方法,也就是说抽象类可以没有abstract方法 3、一旦类包含了抽象的方法,则这个类必须声明为abstract 4、abstract只能修饰类和方法,不能修饰属性和其他的 5、抽象类可以有任意的成员[抽象类的本质还是一个类],比如我们可以有非抽象的方法、构造器、静态属性等等 6、抽象方法不能有方法体,即不能实现 7、如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除法它自己也声明为abstract类 8、抽象方法不能使用private、final和static