Java 无法从静态上下文错误引用

Java 无法从静态上下文错误引用,java,Java,我在主课里面有两节课。我想在静态main方法中实例化该类的两个对象。但我得到“不能从静态上下文错误引用”。我错在哪里 public class Main { public static void main(String[] args) { Parent p = new Parent(); } public class Parent { String x = "Parent"; public void print() {

我在主课里面有两节课。我想在静态main方法中实例化该类的两个对象。但我得到“不能从静态上下文错误引用”。我错在哪里

public class Main {

    public static void main(String[] args) {
        Parent p = new Parent();
    }

    public class Parent {
        String x = "Parent";
        public void print() {
            System.out.println(x);
        }
    }

    public class Child extends Parent {
        String x = "Child";
        public void print() {
            System.out.println(x);
        }
    }

}

父类和子类依赖于Main的实例,因为它们是内部类

如果要创建父实例或子实例,可以做两件事

  • 创建Main的实例,然后使用此引用创建父对象或子对象
  • 更改父级和子级的类声明并添加静态

您可以将类从主方法中删除,但这是一种非常混乱的方法,根本不建议使用

public class SOTest {

    public static void main(String[] args) {
        Parent p = new Parent();
    }
}
class Parent {
    String x = "Parent";
    public void print() {
        System.out.println(x);
    }
}

class Child extends Parent {
    String x = "Child";
    public void print() {
        System.out.println(x);
    }
}
或者,最好的方法之一是将父类和子类设置为非静态内部类,如下所示

public class SOTest {

    public static void main(String[] args) {
        SOTest soTest = new SOTest();
        Parent p = soTest.new Parent(); //Example of non static inner class
    }

    class Parent {
        String x = "Parent";
        public void print() {
            System.out.println(x);
        }
    }

    class Child extends Parent {
        String x = "Child";
        public void print() {
            System.out.println(x);
        }
    }
}
或者可能是静态的内部类(取决于您的需求)


如果将所有类放在一个文件中,则只创建了两个内部类。您可能并不打算这样做,而是希望有两个正常的类。因此,您应该将每个类放入它自己的文件中。或者使用
公共静态类父类
使它们成为静态内部类。谢谢。如果我选择第一个选项(创建main的实例,然后创建父/子实例),我该怎么做?Main Main=新的Main()。然后?用
Main m=newmain();Main.Parent p=新的m.Parent()我尝试执行:public static void main(String[]args){main m=new main();main.Parent pr=new m.Parent();}但它给了我一个错误:包“m”不存在。你能发布整个代码吗?使用类declaration.package.com.company;公共类Main{public static void Main(String[]args){Main m=new Main();Main.Parent pr=new m.Parent();}公共类父类{String x=“Parent”;公共void print(){System.out.println(x);}}公共类子类扩展父类{String x=“Child”;public void print(){System.out.println(x);System.out.println(super.x);}
public class SOTest {

    public static void main(String[] args) {
        Parent p = new Parent();
    }
}
class Parent {
    String x = "Parent";
    public void print() {
        System.out.println(x);
    }
}

class Child extends Parent {
    String x = "Child";
    public void print() {
        System.out.println(x);
    }
}
public class SOTest {

    public static void main(String[] args) {
        SOTest soTest = new SOTest();
        Parent p = soTest.new Parent(); //Example of non static inner class
    }

    class Parent {
        String x = "Parent";
        public void print() {
            System.out.println(x);
        }
    }

    class Child extends Parent {
        String x = "Child";
        public void print() {
            System.out.println(x);
        }
    }
}
public class SOTest {

    public static void main(String[] args) {
        Parent p = new SOTest.Parent(); //Example of static inner class
    }

    static class Parent {
        String x = "Parent";
        public void print() {
            System.out.println(x);
        }
    }

    static class Child extends Parent {
        String x = "Child";
        public void print() {
            System.out.println(x);
        }
    }
}