什么是抽象类?为什么要有抽象类?
需求:定义一些图形类,有Circle圆类,Rectangle矩形类,Triangle三角形类等,它们都有相同的功能:求面积。
此时这些图形有一个公共的父类叫做Graphic,它有大家共同的方法 area(),但是这个方法在父类中无法给出具体的适用于所有子类的统一实现,所以这个方法必须是抽象方法。Java中规定,一个类如果包含抽象方法,那么这个类就必须是抽象类。
抽象类的语法
【其他修饰符】 abstract class 抽象类名{
【其他修饰符】 abstract 返回值类型 方法名(【形参列表】); //抽象方法是没有方法体
}
抽象类的特点
-
抽象类不能直接创建对象。
-
抽象类是用来被继承的。可以创建非抽象子类的对象。子类如果是非抽象的,那么必须重写抽象父类所有的抽象方法。
-
如果类中包含抽象方法,类必须是抽象类。反过来,抽象类可以没有抽象方法。
package com.gj.special;
public abstract class Graphic {
public abstract double area();
}
package com.atguigu.special;
public class Circle extends Graphic{
private double radius;//半径
public Circle(double radius) {
this.radius = radius;
}
//重写抽象方法的快捷键:Ctrl + i 或 Ctrl + O
@Override
public double area() {
return Math.PI * radius * radius;
}
}
package com.atguigu.special;
public class TestGraphic {
public static void main(String[] args) {
/* Graphic g = new Graphic() ;//抽象类不能直接实例化
System.out.println(g.area());*/
Circle c = new Circle(2.5);
System.out.println(c.area());
}
}