2014-03-27 186 views
-1

我很困惑在我的计划结束时。我正在开发一个银行账户的Java程序,并将抽象类和子类集成在一起。如何实例化抽象类的子类?

public abstract class Account { 
    public static void main(String args[]) { 
     CheckingAccount Account1 = new CheckingAccount(); 
    } 
    public Account() { 
     // 
    } 
    public class CheckingAccount extends Account { 
     // 
    } 
} 

我已经试过外面的CheckingAccount类,并从类带走public然而,然后我得到它找不到主的帐户类的错误消息。

如果我将static添加到CheckingAccount类中,则会出现上述同样的错误。

+2

但是你没有说当前的代码是什么问题? –

回答

3

您不能从静态方法(main)实例化实例类(CheckingAccount)。你必须让内部类static

public abstract class Account { 
    public static void main(String args[]) { 
     CheckingAccount Account1 = new CheckingAccount(); 
    } 
    public Account() { 
     // 
    } 
    public static class CheckingAccount extends Account { 
     // 
    } 
} 

顺便说一句,这是一个很奇怪的设计。我会避免:

  • 与你的类混合的主要方法,只是做一个新的分离账户类,而不是
  • 声明一个内部类作为扩展容器类,使用两个类(在两个不同的类)代替。
0

在一个java类文件中不能有两个公共类。而且,Java文件应该用其中的公共类命名。

1

内部类的问题是 - 你应该只在你确实知道你需要它的时候使用它。否则你会面临这样的问题。

那么这有什么问题?基本上,内部类实例总是包围封闭类的一个实例。所以要访问它们,你需要一个封闭类的实例。但是,您试图从static方法实例化CheckingAccount类。并且因为static方法没有对this实例的引用,所以这种实例化方式是非法的。如果您更改实例化这个

问题可能会去:

public static void main(String args[]) { 
    CheckingAccount Account1 = new Account().new CheckingAccount(); 
} 

但是,这将不能工作,因为Account类是abstract。所以,你应该在这里做两个即时更改:

  1. main()方法移到Account类之外。理想情况下,您的域类中不应该有main()方法。为此创建一个单独的类。
  2. 移动CheckingAccount类以外Account类。这对你更容易。