求大神帮衬

2019-12-19 10:20栏目:关于计算机

黑桃K、编写一个应用程序,要求定义一个抽象的父类shape,在父类中要求包含抽象方法area。再定义个子类circle,继承shape类,并实现从键盘输入一个double型的圆的半径,计算并输出其面积。

 

1.当用abstract来修饰一个类时,这个类就是抽象类。当abstract来修饰一个方法时,这个方法就是抽象方法。

2.含有抽象方法的类必须被定义为抽象类,抽象类必须被继承,抽象方法必须被重写

3.抽象类不能被实例化,只能被子类继承。

4.抽象方法只需声明,无需实现,抽象方法没有方法体

例,在同一个包下定义一个Shape.java文件

public abstract class Shape {

    {
        System.out.println("执行Shape的初始化块");
    }
    //定义一个计算周长的抽象方法
    public abstract double calPerimeter();
    //定义一个返回形状的抽象方法
    public abstract String getTyp();
}

再定义一个Triangle.java文件

public class Triangle extends Shape{

    //定义三边
    private double a;
    private double b;
    private double c;

    public Triangle(double a,double b , double c) {
        this.setSides(a,b,c);
    }
    public void setSides(double a, double b , double c){
        if (a >= b c && b >= a   c && c >= b   a) {
            System.out.println("三角形不合法");
            return;
        }
        this.a = a;
        this.b = b;
        this.c = c;
    }

    //重写父类计算周长的抽象方法
    @Override
    public double calPerimeter() {

        return a   b   c;
    }

    //重写父类的返回形状的方法
    @Override
    public String getTyp() {

        return "三角形";
    }

    public static void main(String[] args)
    {
        Shape s1 = new Triangle(3,4,5);
     //输出12.0
        System.out.println(s1.calPerimeter());

    }

抽象类的作用:

/*自己总结的*/

如果不同的子类需要从父类类中调用相同的方法,比如都需要计算周长,从shape父类中调用calPerimeter()方法,但圆(circle)与三角形(triangle)计算周长的方式并不一样,如果在shape定义一个带有方法体的非抽象方法,一定不能满足同时计算圆与三角形周长的要求。如果定义shape为抽象类,calPerimeter为抽象方法,只需要在子类中重写calPerieter()方法适合自己就行了。
/*书本*/

从语义的角度来看抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模版,从而避免了子类设计的任意性。

 

版权声明:本文由威尼斯网站发布于关于计算机,转载请注明出处:求大神帮衬