JavaSE | 抽象类

  • 八个点让你认识抽象类
    • 1 . abstract修饰的类
    • 2 . 类中含有abstract修饰的成员方法
    • 3 . 抽象类不能被实例化
    • 4 . 抽象类的成员
    • 5 . 抽象类的继承
    • 6 . 重写方法
    • 7 . 不想重写方法怎么办
    • 8 . 抽象方法的修饰符

八个点让你认识抽象类

1 . abstract修饰的类

在Java中有一种特殊的类,叫做抽象类。使用abstract修饰的类,就叫做抽象类。

abstract class Shape {
    
}

img

抽象类跟普通的类一样的语法规则,不同的是在前面加上了abstract修饰。

2 . 类中含有abstract修饰的成员方法

一个类中含有abstract修饰的成员方法,该类必须被设计成抽象类。

abstract class Shape {
    abstract public void func();
}

3 . 抽象类不能被实例化

public class test {
    public static void main(String[] args) {
        //抽象类不能被实例化,此处会报编译错误
        Shape shape = new Shape();
    }
}

JavaSE | 抽象类_第1张图片

4 . 抽象类的成员

抽象类也可以拥有和普通类一样的成员。

abstract class Shape {
    public int a;
    public static int b;
    public void func1() {
        System.out.println();
    }
    public static void func2() {
        System.out.println();
    }
    abstract public void func();
}

JavaSE | 抽象类_第2张图片

最突出的跟普通类不一样的是抽象类不能被实例化。

5 . 抽象类的继承

既然抽象类不能被实例化,那么抽象是否就一无是处呢?答案是不是的。

抽象类能被其他类继承。

abstract class Shape {
    public int a;
    public static int b;
    public void func1() {
        System.out.println();
    }
    public static void func2() {
        System.out.println();
    }
    
}
class A extends Shape {
    
}

抽象类其实创建出来就是为了被继承的。

6 . 重写方法

一个类A继承了抽象类B,那么抽象类中的所有抽象方法在类A中都要被重写。

abstract class Shape {
    public int a;
    public static int b;
    abstract public void func1();
    abstract public void func2();

}
class A extends Shape {
    @Override
    public void func1() {
        
    }

    @Override
    public void func2() {
        
    }
}

此时在抽象类中的抽象方法可以没有具体的实现,具体的实现交给子类来完成。

7 . 不想重写方法怎么办

当你继承了一个抽象类,抽象类中含有抽象方法,你不想重写怎么办?

很简单,把你继承之后的类也变成抽象类即可。

abstract class Shape {
    public int a;
    public static int b;
    abstract public void func1();
    abstract public void func2();

}
abstract class A extends Shape {
    
}

但当你这个抽象类继续被另一个类继承,你没有重写的方法,要在另一个类中全部重写完成。

abstract class Shape {
    public int a;
    public static int b;
    abstract public void func1();
    abstract public void func2();

}
abstract class A extends Shape {
    abstract public void func3();
}
class B extends A {
    @Override
    public void func1() {
        
    }

    @Override
    public void func2() {
        
    }

    @Override
    public void func3() {
        
    }
}

8 . 抽象方法的修饰符

抽象方法不能被private、static、final修饰

JavaSE | 抽象类_第3张图片

你可能感兴趣的:(java)