Java 杂谈Java面试经常被问到的内容技术文

Java基础系列2:抽象类

2019-08-22  本文已影响1人  OwenCan
抽象方法
public abstract class demo{
    private String name;

    public abstract int quantity();
}
声明抽象方法会造成两个结果:

继承抽象方法的子类必须重写该方法,子类也要声明为抽象类。最终,要有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。

抽象类总结
  1. 抽象类不能被实例化,如果被实例化,会报错,编辑无法通过,只有抽象类的非抽象子类可以创建对象。
  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  3. 抽象类中的抽象方法只是声明,不包含方法体。
  4. 构造方法、用static修饰的类方法不能声明为抽象方法。
  5. 抽象类的子类必须给出父类所有抽象法发的具体实现,除非该子类也是抽象类。
示例

定义 Shape 类表示一般二维图形。Shape 具有抽象方法 area 和 perimeter,分别计算形状的面积和周长。试定义一些二维形状类(如矩形、三角形、圆形等),这些均为 Shape 类的子类并计算出这些形状的面积和周长,打印输出相关信息。

//形状类:
public abstract class Shape {
    public abstract double area();
    public abstract double perimeter();
} 

//矩形类:
public class Rectangle extends Shape {
    private double length;
    private double width;

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    @Override
    public double area() {
        return getLength() * getWidth();
    }

    @Override
    public double perimeter() {
        return 2 * (getWidth() + getWidth());
    }
}

//三角形类:
public class Triangle extends Shape {
    private double a, b, c;

    public double getA() {
        return a;
    }

    public void setA(double a) {
        this.a = a;
    }

    public double getB() {
        return b;
    }

    public void setB(double b) {
        this.b = b;
    }

    public double getC() {
        return c;
    }

    public void setC(double c) {
        this.c = c;
    }

    @Override
    public double area() {
        double p = (getA() + getB() + getC()) / 2;
        return Math.sqrt(p * (p - getA()) * (p - getB()) * (p - getC()));
    }

    @Override
    public double perimeter() {
        return getA() + getB() + getC();
    }
}

//圆形类:
public class Circle extends Shape {
    private double diameter;

    public double getDiameter() {
        return diameter;
    }

    public void setDiameter(double diameter) {
        this.diameter = diameter;
    }

    @Override
    public double area() {
        return Math.PI * Math.pow(getDiameter() / 2, 2);
    }

    @Override
    public double perimeter() {
        return Math.PI * getDiameter();
    }
}

//测试代码:
public class Test {
    public static void main(String [] args){
        Rectangle rec = new Rectangle();
        rec.setLength(10);
        rec.setWidth(5);
        double rec_area = rec.area();
        double rec_perimeter = rec.perimeter();
        System.out.println("矩形的面积:"+rec_area+",周长"+rec_perimeter);

        Triangle tri = new Triangle();
        tri.setA(3);
        tri.setB(4);
        tri.setC(5);
        double tri_area = tri.area();
        double tri_perimeter = tri.perimeter();
        System.out.println("三角形的面积:"+tri_area+",周长"+tri_perimeter);

        Circle cir = new Circle();
        cir.setDiameter(10);
        double cir_area = cir.area();
        double cir_perimeter = cir.perimeter();
        System.out.println("圆形的面积:"+cir_area+",周长"+cir_perimeter);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读