什么是抽象类?
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象 ,这样的类就是抽象类。
什么是抽象方法?
抽象方法是被abstract修饰的没有方法体的方法,这个方法必须被子类重写,抽象方法定义了一种接口的范式
示例:
public abstract class Shape {// 抽象类
abstract public double getArea();// 抽象方法
}
拥有抽象方法的类就是抽象类,抽象类必须被abstract关键字修饰.
我们先来看一个代码
abstract class Shape {// 抽象类
abstract public double getArea();// 抽象方法
}
public class Test{
public static void main(String[] args) {
Shape shape = new Shape();
}
}
运行结果:
/Users/yinger/Desktop/OS/Code/src/Test.java:7:23
java: Shape是抽象的; 无法实例化
从这个程序,我们可以看出抽象类无法直接实例化对象.由于抽象类中存在抽象方法,抽象方法没有方法体,无法被调用,创建抽象类更是无从谈起.
抽象类的使用:
我们来看一个正确的示例:
abstract class Shape {// 抽象类
abstract public double getArea();// 抽象方法
}
public class Rectangle extends Shape {
private double w;
private double l;
public Rectangle(double w, double l) {
this.w = w;
this.l = l;
}
@Override
public double getArea() {
return w * l;
}
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(2, 4);
System.out.println(rectangle.getArea());
}
}
总结:
抽象类中有构造方法么?
抽象类也是类,也存在成员变量,和普通成员方法,子类在构造之前也是需要先对父类(抽象类)进行构造的,所以抽象类中一定是由构造方法的.
抽象类可以用final private声明么?
不能,由于抽象类必须被继承
抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.有人就会说了,使用普通类也可以被继承,方法也可以被重写,为啥非得用抽象类呢?
因为抽象类是一种语法,编译器可以进行校验,强制进行代码检查,抽象类中的抽象方法要么给我重写了,要么子类是一个抽象类.将这种 思想抽象成语法就可以预防出错,毕竟靠人工检查总会有出错的时候.
本小节就介绍到这里.