我只能访问接口(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/