我需要知道此代码的输出。但它不起作用。也许代码错了。 我还在学习如何使用Java,我尝试了几个小时,但仍然没有运气。
以下是代码:
public class A
{
public A()
{
System.out.println ("A");
}
}
public class B extends A
{
public B()
{
System.out.println ("B");
}
}
public class C extends B
{
public C()
{
System.out.println ("C");
}
}
public static void main(String args[]) {
A a = new A();
B b = new B();
C c = new C();
}
有人能告诉我代码中有什么问题或缺失吗?
答案 0 :(得分:5)
将主要方法放在课堂上。
Filename : DemoClass.java
class A
{
public A()
{
System.out.println ("A");
}
}
class B extends A
{
public B()
{
System.out.println ("B");
}
}
class C extends B
{
public C()
{
System.out.println ("C");
}
}
public class DemoClass {
public static void main(String args[]) {
A a = new A();
B b = new B();
C c = new C();
}
}
此处的另一点是,您只能在文件中包含公共类,因此A
B
和C
所有类在同一个java中不能是public
文件。
您的java文件名必须与公共类名相同。即此处DemoClass
是公共类,因此文件名将为DemoClass.java
入门的Java文档:getting started with java
答案 1 :(得分:2)
例如:
public class Example {
public static void main(String...args) {
new C();
}
public static class A {
public A() {
System.out.println("A");
}
}
public static class B extends A {
public B() {
System.out.println("B");
}
}
public static class C extends B {
public C() {
System.out.println("C");
}
}
}
另请注意,这可能无法打印您所期望的内容。它实际上会打印出来:
A
B
C
为什么呢?构造函数总是链接到超级类。
答案 2 :(得分:0)
您可以(但不建议)将类嵌套在文件中。这完全有效。
请注意,在下面的输出中,每个连续的子句隐式调用其父级的默认构造函数(super()
)。
我建议您创建文件:A.java
,B.java
,C.java
和InheritenceTest.java
。
public class InheritenceTest {
public class A {
public A() {
System.out.println("A");
}
}
public class B extends A {
public B() {
System.out.println("B");
}
}
public class C extends B {
public C() {
System.out.println("C");
}
}
public static void main(String args[]) {
InheritenceTest i = new InheritenceTest();
A a = i.new A();
B b = i.new B();
C c = i.new C();
}
}
输出:
A
A
B
A
B
C
答案 3 :(得分:0)
警告: 在1个java文件中不应该有超过1个公共类,不推荐使用。但是,如果您不使用“公共”标识符(或使用静态或在另一个类中),它仍然可以工作。但对于初学者,我建议你将它们全部放在不同的文件中。
错误: 您的主要方法不属于任何类。我建议你创建另一个包含public static void main方法的类来测试你的应用程序。
信息:继续关注继承,因为您的打印可能不是您所期望的。 (B类的构造函数调用A的构造函数,类C的构造函数调用构造函数B,后者又调用A的构造函数。
这就是你得到的原因
A
A
B
A
B
C
*due to A() it prints A, then due to B() it prints A B and finally due to C() it prints A B C.
在您的情况下,我会尝试以下方法:
//Filename: A.java
public class A {
public A() {
System.out.println ("A");
}
}
//Filename: B.java
public class B extends A {
public B() {
System.out.println ("B");
}
}
//Filename: C.java
public class C extends B {
public C() {
System.out.println ("C");
}
}
//Filename: Test.java
//use a Test class for testing
public class Test {
public static void main(String args[]) {
A a = new A();
B b = new B();
C c = new C();
}
}