Java 抽象类和抽象方法

抽象方法

被abstract修饰的实例方法

  • 只有方法申明,没有方法实现(参数列表后面没有大括号,而是分号)
  • 不是用private修饰权限(因为定义抽象方法的目的是让子类去实现)
  • 只能定义在抽象类、接口中

抽象类

被abstract修饰类

  • 可以定义抽象方法
  • 不能实例化,但可以自定义构造方法
  • 子类必须实现抽象类中的所有抽象方法(除非子类也是一个抽象方法)
  • 可以像非抽象类一样定义成员变量、常量、嵌套类、初始化块、非抽象方法等

抽象类使用场景

如果A类和B类中都有公共的部分,可以把这部分抽取为一个抽象类,然后A类和B类继承这个抽象类。

示例:假设需要求圆形和长方形的面积和周长。

  1. 创建一个图形(Shape)抽象类,包含面积,周长成员变量和计算的抽象方法
public abstract class Shape {
    
    //名字
    private String name;
    //面积
    protected double area;
    //周长
    protected double girth;
    
    public Shape(String name) {
        this.name = name;
    }
    
    public double getArea() {return area;}
    
    public double getGirth() {return girth;}
    
    public void show() {
        calculate();
        System.out.println(name + "的面积是:" + area);
        System.out.println(name + "的周长是:" + girth);
    }
    
    /*
     * 抽象方法,计算
     */
    public abstract void calculate();
}
  1. 创建一个长方形,并继承Shape
public class Rectangle extends Shape {

    private double width;
    private double height;
    
    public Rectangle(String name, double width, double height) {
        super(name);
        // TODO Auto-generated constructor stub
        this.width = width;
        this.height = height;
    }

    @Override
    public void calculate() {
        // TODO Auto-generated method stub
        this.area = this.width * this.height;
        this.girth = 2 * (this.width + this.height);
    }
}
  1. 创建一个圆形,并继承Shape
public class Round extends Shape {

    //圆的半径
    private double radius;
    
    public Round(String name, double radius) {
        super(name);
        // TODO Auto-generated constructor stub
        this.radius = radius;
    }

    @Override
    public void calculate() {
        // TODO Auto-generated method stub
        this.area = Math.sqrt(this.radius) * Math.PI;
        this.girth = 2 * Math.PI * this.radius;
    }
}
  1. 在main方法中初始化圆形和长方形
Shape round = new Round("圆形", 100);
round.show();
Shape rectangle = new Rectangle("长方形", 100, 200);
rectangle.show();
  1. 打印结果为
圆形的面积是:31.41592653589793
圆形的周长是:628.3185307179587
长方形的面积是:20000.0
长方形的周长是:600.0

你可能感兴趣的:(Java 抽象类和抽象方法)