(一)基础知识
@abstract
* 1.产生条件?
* 当定义一个类时,常常需要定义一些方法对数据信息进行操作,但有时这些方法的实现是无法确定的。
* Java规定,用abstract关键字修饰的方法被称为抽象方法,定义时不写函数体(仅声明参数和返回值),
* 同时,包含抽象方法的类也必须定义为抽象类,同样用abstract修饰
* 2.特点:抽象类不能实例化出对象,只是一个提供父类的作用。
* 3.抽象类的子类:子类必须为父类的所有抽象方法提供具体实现,否则子类依然是抽象类
(二)举个栗子
import java.util.*;
import java.lang.Math;
abstract class Shape{
public String color = "white";
public void sayColor() { //抽象类中可以有具体方法
System.out.println("颜色是:"+color);
}
public abstract double getArea(); //定义的抽象方法
}
class Circle extends Shape{
public double radius;
Circle(double radius){
this.radius=radius;
}
Circle(){}
public double getArea() { //子类实现父类的抽象方法
return Math.PI*radius*radius;
}
}
class Rectangle extends Shape{
public double length;
public double width;
public double getArea() {
return length*width;
}
}
public class abstract_demo {
public static void main(String[] args) {
//实例化出Rectangle对象并测试getArea()方法
Rectangle r = new Rectangle();
System.out.print("输入长方形的长和宽:");
Scanner scan = new Scanner(System.in);
r.length=scan.nextDouble();
r.width=scan.nextDouble();
System.out.println("长方形的面积为:"+r.getArea());
//实例化出Circle对象并测试getArea()方法
Circle c = new Circle();
System.out.print("输入圆的半径:");
c.radius=scan.nextDouble();
System.out.println("圆的面积为:"+c.getArea());
/*Shape shape = new Shape(); 编译器报错不能实例化类型 Shape*/
scan.close();
}
}