【Java 学习笔记】 抽象类和接口

时间:2023-02-26 19:13:55

抽象类:类的设计应当保证父类包含子类的共同特征,有时为了方便会将父类设计的特别抽象以至于没有具体实例,称之为抽象类。

 -多重继承:需要从多个类中派生出一个子类,这种能力叫做多重继承。

 -单重继承:每个子类都是直接从父类继承的。(Java、C++)

如:圆、椭圆、正方形等等都可以抽象成为几何图形,几何图形便是一个抽象类。几何图形中含有派生类中的一些共有函数,如计算周长和面积,这些在抽象类中都无法计算,所以设置为抽象方法。这些抽象方法会在派生类中实现。

抽象类(几何图形)举例:

public abstract class GeometricObject {
    private String color = "white";
    private boolean filled;
    
    /**初始化函数*/
    protected GeometricObject()
    {
        
    }
    /**初始化函数*/
    protected GeometricObject(String color, boolean filled)
    {
        this.color = color;
        this.filled = filled;
    }
    
    ///////// 虚函数
    /** Abstract method findArea*/
    public abstract double findArea();
    
    /** Abstract method findPerimeter*/
    public abstract double findPerimeter();
    
    ///////// Getter and Setter
    /** Get color*/
    public String getColor() {
        return color;
    }
    /** Set color*/
    public void setColor(String color) {
        this.color = color;
    }
    /** Get filled*/
    public boolean isFilled() {
        return filled;
    }
    /** Set filled*/
    public void setFilled(boolean filled) {
        this.filled = filled;
    }

}

抽象类派生类举例(圆)举例:

public class Circle extends GeometricObject{
    private double radius;
    
    /** Construct a circle with default properties*/
    public Circle(double radius)
    {
        this.radius = radius;
    }
    
    /** Constrcut a circle with specified radius, filled, color*/
    public Circle(double radius, String color, boolean filled)
    {
        super(color,filled);
        this.radius = radius;
    }
    
    /////////// 实现的虚拟方法
    @Override
    public double findArea() {
        // TODO Auto-generated method stub
        return radius*radius*Math.PI;
    }

    @Override
    public double findPerimeter() {
        // TODO Auto-generated method stub
        return 2*radius*Math.PI;
    }

    ////////Getter and Setters
    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }    
}

接口: 接口是一种与类相似的结构,只包含常量和抽象方法。