java - Java中的数组继承

标签 java

当我使用继承并定义父类的对象,然后从具有自己的属性的子类调用构造函数时,我遇到了问题。当我想使用 set 方法为子类分配值时,它给我一个错误(找不到符号) 这是我的代码

    public class Shape {
private final double PI =3.14;
public Shape() {
}
public double getPI() {
    return PI;
} 
}

public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle() {
}  
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;
} 
}
public class Circle extends Shape{
private double radius;
public Circle(double radius) {
    this.radius = radius;
} 
public double getRadius() {
    return radius;
}
public void setRadius(double radius) {
    this.radius = radius;
}  

}

public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    Shape s[] = new Shape[3];
    int type;
    for (int i = 0; i < s.length; i++) {
         System.out.println("Enter the Shape:\n 1.Rectangle \n 2.Circle");
         type = in.nextInt();
         if(type==1){
             s[i] = new Rectangle();
             s[i].setLength(5.5);
         }  
    }
}

最佳答案

你的问题出在这里:

s[i] = new Rectangle();
s[i].setLength(5.5);

是的。您知道该表单是 Rectangle 的一个实例,JVM 只知道它是一个 Shape。如果您想将其用作矩形,则必须将其声明为一个:

Rectangle r = new Rectangle();
r.setLength(5.5);
s[i] = r;

编辑:这样做的原因是,当您将一个实例声明为 Shape (父类)时,JVM 会认为它是这样的,即使您的代码建议(对人类读者) )将使用特定类型,JVM 不会对将实例化哪个子类做出任何假设。 您的可能性仅限于您声明的类别。

由于您现在再次将其保存为数组中的 Shape,如果稍后您想要获取该值,则需要对其进行转换。

Rectangle rNew = (Rectangle)s[index]; // of course after checking whether it is in fact a Rectangle

关于java - Java中的数组继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53513700/

相关文章:

java - 发送时发生异常,javax.mail.MessagingException : 530 5. 7.57 SMTP;客户端未通过身份验证,无法在 MAIL FROM 期间发送匿名邮件

java - 使用递归方法通过控制流中断 Java 循环的迭代

Java 名称 Swing 小程序

java - java线程是在系统中使用实时定时器还是它有自己的专用定时器?

java - Hibernate 无法找到具有逻辑名称的列

java - AST如何处理空节点

java - 如何在 Android 中访问剪贴板数据?

java - JButton 未显示在滚动 Pane 中

java - JMockit - 要测试的类的实例为空

java - 将值存储在 Java 集合中