如何实例化抽象类的子类?它给出了错误 - 不能访问类型为abstractclass的封闭实例。无论我如何交换价值观。我知道我不能使用motorvehicle cuz抽象类不能实例化....
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");
}
}
}
答案 0 :(得分:2)
它不会让你实例化它们,因为你已经将它们声明为内部类。使用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
不是抽象的。
答案 1 :(得分:1)
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");
}
}
}
这里Car class我声明为static,它可以在“abstractclass”中实例化。
如需进一步参考,您可以查看Getting a "No enclosing instance of type..." error
答案 2 :(得分:0)
删除此: public class abstractclass {
并且从文件末尾开始结束}。
您已将整个程序包装到一个抽象类中。那是错的:)。