如何从静态方法中提取非静态变量?

时间:2015-07-09 11:42:09

标签: java

问)我得到一个编译错误10 ::非静态变量,这不能从静态内容中引用

现在该怎么办?

class Computer
{    
  void method()    
  {    
     System.out.println("this i objects");
  }


   public static void main(String[] args)    
    {    
      Laptop mtd = new Laptop();
      Computer mtd1 = new Computer();
      mtd.method();
      mtd1.method();
     }  


class Laptop
  {    
    void method()    
     {    
      System.out.println("using laptop method");         
     }    
  }    
}

2 个答案:

答案 0 :(得分:1)

笔记本电脑是计算机的内部类,因此您必须从计算机实例中实例化笔记本电脑。或者您可以将内部笔记本电脑类标记为静态,然后您可以直接实例化它。我的例子演示了两种方法:

class Computer
{

  public static void main(String[] args)
  {
      Computer computer = new Computer();
      computer.method();

      // Instantiate normal inner class from instance object.
      Laptop laptop = computer.new Laptop(); // Or: new Computer().new Laptop();
      laptop.method();

      // Instantiate static inner class directly.
      StaticLaptop staticLaptop = new StaticLaptop();
      staticLaptop.method();
  }

  void method()    
  {
      System.out.println("I'm Computer!");
  }


  class Laptop
  {
      void method()
      {
        System.out.println("I'm Laptop!");  
      }
  }

  static class StaticLaptop
  {
      void method()
      {
        System.out.println("I'm StaticLaptop!");  
      }
  }

}

答案 1 :(得分:0)

您已将Laptop放入Computer班级。

你应该重构为static class Laptop。否则,您将笔记本电脑实例绑定到特定的计算机实例,您可能不想这样做。 (如果您真的想要这样做,那么您必须写new Computer().new Laptop();

虽然我认为,实际上,你想写

class Laptop extends Computer

称为继承