java - 如何使用不在接口(interface)接口(interface)中的方法 i = new class();

标签 java oop

我只能访问接口(interface) Measurable 中的 m1/m2 的方法/变量,如何访问其他方法和变量?

如何在 getArea() 方法中使用 m1/m2 对象的 getLength() 和 getBreadth()/getRadius() 方法?提前致谢!

public class Main {

    public static void main(String[] args) {

        Circle c = new Circle(10);
        Rectangle r = new Rectangle(10,5);

        addArea(c, r);

        Measurable Rec = new Rectangle(10, 5);
        Measurable Cir = new Circle(10);

        addArea(Rec, Cir);
    }

    public static void addArea(Measurable m1, Measurable m2){
        String m1s = null,m2s = null;

        if(m1 instanceof Rectangle){
            m1s="Rectangle";
        }
        else if(m1 instanceof Circle){
            m1s="Circle";
        }

        if(m2 instanceof Circle){
            m2s="Circle";
        }
        else if(m2 instanceof Rectangle){
            m2s="Rectangle";
        }

        System.out.println("Area of "+m1s+" and "+m2s+" is "+(m1.getArea()+m2.getArea())+"\n");
    }

}

interface Measurable{
    double PI = 3.14;
    public double getPerimeter();
    public double getArea();
}

class Rectangle implements Measurable{

    public double breadth, length;

    public Rectangle(int breadth, int length){
        this.breadth = breadth;
        this.length = length;
    }

    @Override
    public double getPerimeter() {
        return 2*(breadth+length);
    }

    @Override
    public double getArea() {
        return length*breadth;
    }

    public double getLength(){
        return length;
    }

    public double getBreadth(){
        return breadth;
    }

}

class Circle implements Measurable{

    public double radius;

    public Circle(int radius){
        this.radius = radius;
    }

    @Override
    public double getPerimeter() {
        return 2*PI*radius;
    }

    @Override
    public double getArea() {
        return PI*radius*radius;
    }

    public double getRadius(){
        return radius;
    }

}

最佳答案

您应该转换您的对象,在您的 if block 中执行此操作并将值分配给 String 对象。接口(interface)的引用不能调用在一个实现它的类中编写的方法。


解决方案

例如 getLength()m1

String m1Length = null;
if(m1 instanceof Rectangle){
    m1s="Rectangle";
    m1Length = ((Rectangle)m1).getLength());
}
else if(m1 instanceof Circle){
    m1s="Circle";
    m1Length = ((Circle)m1).getLength());
}

将此逻辑应用于其余代码,您会没事的。

关于java - 如何使用不在接口(interface)接口(interface)中的方法 i = new class();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240693/

相关文章:

java - 有没有办法在 Linux 上用 Java 原子地写入文件?

php - 如何用未知参数初始化对象?

php - 如何拦截 PDO 调用?

python - 抽象基类中的断言?

java - 我缺少什么来运行 jersey 2 网络服务?

java - 选择房间的有效成人和 child 组合

java - 如何限制子类访问父类(super class)方法?

c# - 从依赖对象中提取基础对象

java - 通过Android开发扩展类的不同方式?

java - 在 Java JSP 页面中找不到有关属性的任何信息