【问题标题】:Java program compilation failedJava程序编译失败
【发布时间】:2021-01-29 05:05:05
【问题描述】:

在研究界面时,我遇到了这种奇怪的行为 当我运行这个

    int num=20;
    public void sound();
    public void eat();
}

class Dog implements Animal{
    public void sound(){
        System.out.println("Wooof!!!!!!!");
    }
    public void eat(){
        System.out.println("Food");
    }
}

public class Main{
    public static void main(String[]args){
        Dog dog=new Dog();
        dog.sound();
        dog.eat();
        System.out.println(Dog.num);
        //System.out.println(Dog.num1);
    }
}

如果我声明一个具有相同名称的无静态变量,即 num 与这样的接口中的变量相同,它运行良好

interface Animal{
    int num=20;
    public void sound();
    public void eat();
}

class Dog implements Animal{
    int num=10;
    public void sound(){
        System.out.println("Wooof!!!!!!!");
    }
    public void eat(){
        System.out.println("Food");
    }
}

public class Main{
    public static void main(String[]args){
        Dog dog=new Dog();
        dog.sound();
        dog.eat();
        System.out.println(Dog.num);
        //System.out.println(Dog.num1);
    }
}

它给出了这个错误Main.java:22: error: non-static variable num cannot be referenced from a static context 我的问题是,由于接口中的一个是静态的并且是类级别的,为什么当我声明一个非静态实例级别变量时子类,即狗编译失败。

【问题讨论】:

    标签: class inheritance interface static non-static


    【解决方案1】:

    问题是您正试图将Dog 类访问到System.out.println()。不是初始化类的变量dog

    如果变量num不是静态的,不初始化类是不可能读取它的,所以如果你想做Dog.num,那个变量必须是静态的。

    如果你不将变量添加到Dog类中,值将在接口中声明,但如果变量存在于类中,编译器会尝试读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多