关于抽象类:
一.抽象类语法:
1.抽象类的关键字是 abstract
2.抽象类也是类 它是可以有普通方法和属性的 甚至也可以有构造方法
抽象类语法 代码如下
//抽象类 关键字 abstract
abstract class Shape{
//抽象方法
public abstract void draw();
//也可以有普通方法和属性
public double getArea() {
return area;
}
protected double area;
}
二.抽象类的特性
1.抽象类不能直接实例化对象
2.抽象方法不能是private的(会没办法来重写它,下面会讲到)
3.抽象方法不能被final和static修饰,因为抽象方法会被子类重写如果是final或者static修饰的话那么就不能再修改它了
4.抽象类必须被继承(这也就是2.中的为什么不能是private,因为权限小,只能在同一个包同一类中使用),而且在子类中必须重写父类的抽象方法,不然的话子类也会变成抽象类,也要使用abstract修饰
关于如何继承抽象类 代码如下
abstract class Shape{
public abstract void draw();
}
//矩形类
class Rect extends Shape{
@Override//注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写
public void draw() {
System.out.println("画个矩形");
}
}
//花类
class Flower extends Shape{
@Override
public void draw() {
System.out.println("画朵花❀");
}
}
public class Test2 {
public static void drawMaps(Shape shape) {
shape.draw();
}
public static void main(String[] args) {
drawMaps(new Rect());
drawMaps(new Flower());
}
}
5.抽象类中不一定有抽象方法,但是又抽象方法的类一定是抽象类
6.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
三.抽象类的作用
抽象类本身是不能被实例化的,你要想用它,就得创建一个它的子类,然后在子类中重写这个抽象类的抽象方法。(可普通的类也可以来继承 重写等等,实现和抽象类一样的功能,那为什么还要用抽象类呢?)
原因如下:
使用了抽象类 也就相当于多出了一重编译器的校验
比如在实际的工作中,不应该让父类完成,应该让子类完成的,如果没写成抽象类,那么在普通类中是不会报错的,但是父类是抽象类,那么在实例化的时候,父类是不可以实例化的,就会报错。
所以使用抽象类,利用编译器的校验在开发中是很有效果的。大家可以多使用多写写来体会它的好处。