Java程序编译失败

问题描述

在学习界面时,我遇到了这种奇怪的行为 当我运行此

    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);
    }
}

如果我声明一个没有静态变量的同名变量,则它运行得很好

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 我的问题是因为来自接口的一个是静态的,并且是类级别的,为什么子类(即当我声明一个非静态实例级别的变量时,狗编译失败)。

解决方法

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

如果变量num不是静态的,则不初始化类就无法读取它,因此,如果您想做Dog.num,则该变量必须是静态的。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...