一、Java抽象类定义:

      用abstract修饰的类叫抽象类,无法直接 new 实例化,可包含抽象方法,子类继承后必须实现所有抽象方法。

二、代码举例:

abstract class Shape{
    public abstract void getArea();
    public void show(){
System.out.println("这是一个图形");
}
}
class Circle extends Shape{
 double r;
public Circle(double r){
this.r=r;
}
@Override
    public void getArea() {
        System.out.println("圆面积:" + 3.14 * r * r);
}
}
public class Test{
public static void main(String[] args){
Shape sh=new Circle(5);
sh.show();
sh.getArea();
}
}

注:1️⃣类前面必须加 abstract,不加就不能写抽象方法

       2️⃣抽象类不能直接 new 创建对象

       3️⃣重写抽象方法必须加 @Override 注解(规范,方便检查错误)

       4️⃣重写时方法返回值、方法名、参数列表必须和父类抽象方法完全一致

       5️⃣子类只有带参构造时,创建对象必须传入参数

       6️⃣父类引用指向子类对象 Shape sh=new Circle(5);

三、Java抽象类优缺点:

优点:si

  • 强制子类统一功能,规范代码   (父类写abstract void getArea();,所有图形子类(圆、矩形)必须重写,不会出现有的类不写算面积方法,代码统一规范。)

  • 配合抽象类复用公共代码 (抽象类里可以放普通方法show(),所有子类直接共用,不用重复写。)

  • 实现多态,统一调用 (父类引用可以接收任意图形对象,统一调用getArea(),扩展新图形时原有调用代码不用改。)

缺点:

  • 受抽象类单继承约束 (抽象方法只能写在抽象类里,Java 一个类只能继承一个父类。如果你的 Circle 已经继承别的抽象类,就不能再继承 Shape。)

  • 子类必须实现全部抽象方法,代码冗余  (如果抽象类定义了 3 个抽象方法,子类哪怕只用其中 1 个,剩下 2 个也要空实现,代码累赘。)

  • 不能单独使用,依赖子类 (抽象方法没有方法体,不能直接调用,必须子类重写后才能使用;包含它的抽象类也不能直接 new 对象。)

  • abstract 不能搭配 static/final/private 抽象方法不能静态调用、不能禁止重写、不能私有,写法限制多。

四、总结

    作为新手初次学习Java抽象类从一开始的不懂,到后来知道抽象类里的抽象方法需在继承抽象类的子类里重写这个抽象方法,再后来明白了在最后调用的时候,抽象方法不能new ,需要抽象父类引用古指向子类实现,好那就让我们继续学习继续进步!!!

更多推荐