Java 关于重写方法,使用两个派生类的代码合法吗?

Java 关于重写方法,使用两个派生类的代码合法吗?,java,oop,overriding,Java,Oop,Overriding,例如: public class example { public class A { public void speak() { System.out.println("Hello!"); } } public class B extends A { public void response() { System.out.

例如:

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!");
  }
}
public class A {

}

class B extends A{


}

class C extends B{

}
A test1=新的A();//这是合法的

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


B test3=新的C();//不合法。为什么会这样?

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

我想你的意思是在同一个源文件中。答案是否定的。 (编译器将用以下消息警告您:公共类型B必须在其自己的文件中定义,或者公共类型C必须在其自己的文件中定义)

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

public class A {
    //blah blah blah

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

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

}

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

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

除非有你没有和我们分享的信息

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

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

您所说的“同一程序”是什么意思

您可以使用.java扩展名在同一个文件中创建多个类,但只允许一个类是公共的,例如:

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!");
  }
}
public class A {

}

class B extends A{


}

class C extends B{

}

文件名应该是带有公共修饰符的文件名,在本例中,它将是A.java

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

这是非法的,因为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

相同是什么意思?相同的程序是什么意思?同班还是?可以在同一源文件中定义类,但不能将它们全部公开。只有一个类可以是公共的,并且文件名应该和公共类的名称相同。你所说的同一是什么意思?它们不是完全相同的,它们有不同的名字对不起,误解了。我修正了。你的意思是:在同一个源文件中。在您的示例(a.java)中,每个类都有一个专用文件:a.class、a$B.class、a$C.class。@PeterWalser感谢您指出这一点。我已经更新了我的答案。你能重新措辞这个问题吗?这两个类可以有不同的方法。公共类A不是文件。它实际上是example.java类中的一个方法。@shuvoo您是在谈论方法重载吗?首先,它不仅仅是一个方法,它是一个特殊的方法,称为构造函数。:)是的,方法重写的重写方法将在本教程中介绍。