使用继承的抽象方法的问题

Problem with abstract methods using inheritance

我正在学习Java中的继承,我正在尝试解决以下代码中的错误:

public static void main(String[] args) {
    Yellow yellow=new Yellow("yellow");
    yellow.ChangeColor();
}
abstract class SpecialColor{
    String color;
    
    SpecialColor(String color){
        this.color=color;
    }

    abstract void ChangeColor();
    
    public String ShowColor(String color) {
        return color;
    }
    
}

class Yellow extends SpecialColor{

    Yellow(String color) {
        super(color);
        
    }
    
    @Override
    void ChangeColor() {
        color="yellow";
        System.out.println("The color is "+color);
    }
    
}

我尝试做的任务基本上是说我需要创建一个抽象的 class SpecialColor 具有 2 个属性 - 颜色名称 (String) 和两个方法 - abstract void ChangeColor(),另一个显示颜色名称,而 class Yellow 扩展此 class 并实现抽象方法,名称需要更改为“黄色”,并显示这些 classes 在 main 中的使用。我遇到的错误是在 main 方法的第一行代码中 - “没有类型的封闭实例是可访问的”,我试图解决这个问题使黄色 class 静态,但随后在 super 上弹出一个新错误(彩色)行表示“由于某些中间构造函数调用,没有类型 sestijanuar8 的封闭实例可用”。我很难理解抽象 classes 和方法,所以任何形式的帮助都将不胜感激!

由于您的错误消息“没有类型的封闭实例是可访问的”,我可以推断出您的所有代码都在封闭的 class 中,这是有道理的,否则您的 main 方法不在 class 中,这是不允许的。

将 class 和 SpecialColorYellow 设为静态。如果你不这样做,那么 class 是封闭 class 的特定 实例 中的一个,你没有,因为你在main,一个静态方法。

如果你制作了 classes 中的一个 static 而不是另一个,那么你仍然会遇到同样的问题,只是可能在不同的位置。

您所写的任何内容都没有表明封闭的 class 实例对于您的 classes 的操作是必需的,所以只需将它们都设为 static,这样它们就不会不依赖于您未使用的封闭 class 的实例。

你的 classes 在另一个 class 里面,它们不是静态的,所以它们是 inner classes。这意味着它们只能通过引用包含 class.

的实例来实例化

要么将它们移出包含 class,要么声明它们 static。然后你就可以实例化它们了。