我在理解“接口”功能在Java中如何有用时遇到困难?

时间:2018-11-22 19:20:56

标签: java

我已经在多个地方查询了“接口”功能,但是似乎没有地方真正解释使用它的好处,或者为什么我在编写自己的未来程序时应该使用接口。

我完成了下面的练习,在该练习中,我使用了一个名为“窗体”的接口来描述“圆周”和“区域”的方法。然后,我有3类“圆形”,“矩形”和“平方”,分别输入并计算每种形式的变量,最后计算出每种形式的周长和面积。

我的问题是,完成练习后,我很难真正理解实现此“表单”界面的意义。我觉得我本可以忽略使用接口,然后简单地通过继承,使每个类都继承圆周和面积方法,然后在编译时最后为每个表单创建对象?

该界面如何使我更轻松?

public class FormCompiling {
    public static void main(String[] args) {
        Form[] f = {new Circle(1.5), new Rectangle(2.0,3.0), new Square(2.5)};
        System.out.println("Area:");
        for(int i = 0 ; i<f.length; i++) {
            System.out.println(f[i].area());
        }
    }
}

public interface Form {
    public double circumference();
    public double area();
}

public class Circle implements Form {
    double radius = 0;
    double area = 0;
    double circumference = 0;

    Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double circumference() {
        circumference = 2 * radius * Math.PI;
        return circumference;
    }

    @Override
    public double area() {
        area = radius * radius * Math.PI;
        return area;
    }
}

public class Rectangle implements Form {
    double length = 0;
    double width = 0;
    double area = 0;
    double circumference = 0;

    Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double circumference() {
        circumference = (2 * length) + (2 * width);
        return circumference;
    }

    @Override
    public double area() {
        area = length * width;
        return area;
    }
}

public class Square extends Rectangle implements Form {

    Square(double length) {
        super(length, length);
        this.length = length;
    }

    @Override
    public double circumference() {
        circumference = 4 * length;
        return circumference;
    }

    @Override
    public double area() {
        area = length * length;
        return area;
    }
}

2 个答案:

答案 0 :(得分:0)

是的,您可能有一个带有空方法的父类(或实现了其中的一些方法)..您会得到类似的结果。但是,如果忘记实现某些方法,则不会出现编译错误。

一个界面“强迫”您遵守某些合同;父类没有。 实际上,接口是合同。 决定执行的人必须执行合同。

  • 界面=“什么” =合同=规格
  • class =“操作方式” =实现

答案 1 :(得分:0)

Java接口最大的用例是促进多态。多态性意味着让一个类的行为与其他多个类的行为相同。 Java不支持多重继承,因此您不能extend多于一个类,但是可以implement多个接口。有很多关于该主题的有用文档,这是oracle的官方文档,可以帮助您入门:https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

接口还可以用作类/程序设计者与实现它的开发人员之间的“社会契约”。通过实现一个接口,您保证您的实现将遵循特定的行为。这样可以实现不同实现之间的一致性,这在尝试与一个大型项目中的许多开发人员进行协作时特别有用。