如何实例化抽象类的子类?

时间:2014-03-27 09:36:58

标签: java abstract-class subclass

我在节目结束时感到难过。我正在创建一个银行帐户java程序,并且在将抽象类和子类集成在一起时遇到了问题。

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

我已经尝试了外面的CheckingAccount类并从课程中删除了public,然后我收到错误消息,它找不到Account类的主要内容。

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

3 个答案:

答案 0 :(得分:3)

您无法从静态方法(CheckingAccount)实例化实例类(main)。你必须创建内部类static

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

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

  • 将您的主要方法与您的类混合,只需创建一个新的分隔帐户类
  • 将内部类声明为容器类的扩展,使用两个类(在两个不同的类中)。

答案 1 :(得分:1)

内部类的问题是 - 只有当你完全知道自己需要它时才应该使用它。否则你会遇到这样的问题。

那么问题是什么?基本上,内部类实例总是包含封闭类的实例。因此,要访问它们,您需要一个封闭类的实例。但是,您正尝试从CheckingAccount方法实例化static类。由于static方法没有引用this实例,因此这种实例化方式是非法的。

如果将实例化更改为此问题,可能会出现问题:

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

但是,由于Account类为abstract,因此无法正常工作。所以,你应该在这里做两个立即的改变:

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

答案 2 :(得分:0)

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