-1

我有一个名为的类A,其中声明了一个字符串。我还有其他 2 个类B and C继承自A

public abstract class A {
    protected String ss="";

    public abstract String someMethod();
}

public class B extends A{
    public String someMethod(){
        int i=8;
        return ss+="$"+i;
    }
}

public class C extends A {
    public String someMethod() {
        int i=9;
       return ss+="$"+i;
    }
}

测试代码:

A aa = new B();
aa.someMethod();

A aaa = new C();    
aaa.someMethod();

当我打印时aaa.someMethod();- 为什么没有附加 B 类和 C 类的字符串?我希望它们被附加。我怎样才能做到这一点 ?

4

2 回答 2

2

Java 中的重写方法不会自动调用它们的父类父类。因此,在您的C子类中,调用someMethod不会从其父类调用该方法A,除非您显式调用 super。

public class C extends A
    public String someMethod(){
        int i=9;
        return ss+= super.someMethod()+"$"+i;
    }
}

我假设您这样做是为了学习,否则这是管理继承的类及其属性的一种非常糟糕的方式。

于 2012-12-19T19:44:48.473 回答
2

/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/javac A.java B.java C.java Test.java

/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java 测试

$8
$9

这里没什么好奇怪的,B 方法 someMethod() 调用 B 方法,C 方法 someMethod() 调用 C 方法...

文件 A.java:

public abstract class A
{
    protected String ss="";
    public abstract String someMethod();
}

文件 B.java

public class B extends A
{
    public String someMethod()
    {
        int i=8;
        return ss+="$"+i;
    }
}

文件 C.java

public class C extends A
{
    public String someMethod()
    {
        int i=9;
        return ss+="$"+i;
    }
}

文件 Test.java

public class Test
{
    public static void main(String pArgs[])
    {
        A aa = new B();
        System.out.println(aa.someMethod());
        A aaa = new C();
        System.out.println(aaa.someMethod());
    }
}
于 2012-12-19T20:07:12.217 回答