-5

例如:

public class example {
    public class A {
            public void speak() {
                    System.out.println("Hello!");
            }
  }

    public class B extends A {
            public void response() {
                    System.out.println("How are you?");
            }
  }

    public class C extends A {
            public void responseTwo() {
                    System.out.println("Good!");
  }
}

A test1 = new A(); // 这是合法的。

A test2 = new B(); // 这也是合法的。

B 测试3 = 新 C(); // 不合法。这是为什么?

4

5 回答 5

2

除非有一些你没有分享的信息应该没问题,B并且C有不同的名称。它们可能具有相同的字段,也可能不同;没关系。

于 2013-10-03T14:26:50.750 回答
1

我认为您的意思是在同一个源文件中。答案是不。(编译器将通过以下消息警告您:公共类型 B 必须在其自己的文件中定义公共类型 C 必须在其自己的文件中定义

您可以定义内部类,如下所示:

public class A {
    //blah blah blah

    public class B extends A {
        //blah blah blah
    }

    public class C extends A {
        //blah blah blah
    }

}
于 2013-10-03T14:26:59.723 回答
1

这些类的声明是正确的。您不能在一个文件中声明多个公共类,但您可以在其他类中声明公共类。但是您只能在声明它们的类中使用它们。

这是非法的,因为 B 和 C 是不同的类。看:

A test1 = new A(); // it's legal.

A test2 = new B(); // it's also legal.

B test3 = new C(); // not legal. Why is that?**

您将 C 类型的对象分配给 B 类型的变量。它们是“兄弟”而不是父/子类。

你可以做:

A test = new C();

你的类层次结构是这样的:

    A
----|----
|       |
B       C
于 2013-10-03T18:57:46.857 回答
0

“相同的程序”是什么意思?

您可以在同一个 FILE 中创建多个扩展名为 .java 的类,但只允许公开一个类,例如:

public class A {

}

class B extends A{


}

class C extends B{

}

并且文件名应该是带有 public 修饰符的那个,在这种情况下它将是 A.java

于 2013-10-03T14:59:43.130 回答
0

所有这些类都应该有自己的“文件”

您是否正在使用 Eclipse,它基本上是在创建一个新类。

除非您没有与我们分享任何信息。

您不能只将多个类放在同一个“文件”(类文件)中

您需要为您希望在程序中拥有的每个类创建单独的类文件。

于 2013-10-03T14:34:15.293 回答