【问题标题】:Instantiate subclass of abstract class实例化抽象类的子类
【发布时间】:2013-12-30 08:06:25
【问题描述】:

如何实例化抽象类的子类?它给出了错误——没有抽象类类型的封闭实例是可访问的。无论我如何交换价值观。我知道我不能使用汽车因为抽象类不能被实例化......

public class abstractclass {
public static void main(String args[]){

    Car car1 = new Car();   

}
abstract class MotorVehicle
{

    int fuel;


    int getFuel()
    {
         return this.fuel;
    }


    abstract void run();


}

class Car extends MotorVehicle
{
    void run()
    {

        System.out.print("Wrroooooooom");
    }


}
}

【问题讨论】:

    标签: java class instantiation abstract


    【解决方案1】:

    它不会让你实例化它们,因为你已经将它们声明为内部类。在类声明之前加上static,你就可以做到:

    class Outer {
    
        class Inner {
    
        }
    
        static class Nested {
    
        }
    }
    

    如果一个嵌套类是inner(非静态),它属于外部类的实例,而不是外部类本身。内部类需要一个外部类的实例来实例化。静态嵌套类没有。

    Outer outer = new Outer();
    Outer.Inner inner = outer.new Inner();
    Outer.Nested nested = new Outer.Nested();
    

    参见Nested Classes 教程。这就是“无封闭实例”消息的含义。你说得对,抽象类不能直接实例化,但Car 不是抽象的。

    【讨论】:

      【解决方案2】:

      Hi Here Car 类是 abstractclass 的内部类。所以只有当它声明为静态时,你才能像这样实例化内部类

      让我们改变你的程序:

      public class Abstract {
      public static void main(String args[]){
      
          Car car1 = new Car();   
      
      }
      abstract class MotorVehicle
      {
      
          int fuel;
      
      
          int getFuel()
          {
               return this.fuel;
          }
      
      
          abstract void run();
      
      
      }
      
      static class Car
      {
          void run()
          {
      
              System.out.print("Wrroooooooom");
          }
      
      
      }
      }
      

      我在这里声明的汽车类是静态的,它可以在“抽象类”中实例化。

      如需进一步参考,您可以查看Getting a "No enclosing instance of type..." error

      【讨论】:

        【解决方案3】:

        删除这个: 公共类抽象类 {

        从文件末尾开始也以 } 结尾。

        您已将整个程序包装到一个抽象类中。那是错误的:)。

        【讨论】:

        • 所以我也必须将 main 函数放在单独的类文件中?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 2013-03-07
        相关资源
        最近更新 更多