Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承类中的字符串连接_Java_String - Fatal编程技术网

Java 继承类中的字符串连接

Java 继承类中的字符串连接,java,string,Java,String,我有一个名为a的类,其中声明了一个字符串。我还有另外两个类B和C,它们是从A继承的 测试代码: A aa = new B(); aa.someMethod(); A aaa = new C(); aaa.someMethod(); 当我打印aaa.someMethod;-为什么没有附加B类和C类的字符串?我想把它们附加起来。如何做到这一点?Java中被重写的方法不会自动调用它们的超类父类。因此,在C子类中,调用someMethod不会从其父类A调用该方法,除非显式调用super pu

我有一个名为a的类,其中声明了一个字符串。我还有另外两个类B和C,它们是从A继承的

测试代码:

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

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

当我打印aaa.someMethod;-为什么没有附加B类和C类的字符串?我想把它们附加起来。如何做到这一点?

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

public class C extends A
    public String someMethod(){
        int i=9;
        return ss+= super.someMethod()+"$"+i;
    }
}
我假设您这样做是为了学习,否则这是一种非常糟糕的管理继承类及其属性的方法。

/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/javac a.java B.java C.java 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());
    }
}
/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java测试

这里没什么奇怪的,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());
    }
}

请发布请发布真实代码。在java中没有inherit关键字,你的aa.someMethod;返回字符串,而不是打印。您需要在System.out.printlnaa.someMethod中移动调用以查看输出。我这样做了,但它只给出类C的方法的结果,而没有得到结果appended@sharonHwk.. 您希望它附加什么?请发布预期输出。还有,一定要把真正的代码贴在这里,否则我们会不断删除你的编译器错误,然后你会说,这是一个打字错误。但是C的父级是OP代码中的a类。你误读了吗?现在你正在调用一个抽象方法。注意,调用超类方法不是这里的问题。OP没有打印someMethod返回的结果,因此它什么也不做。因此,他可能认为它正在打印类A中声明的空字符串,而不是附加来自类C和B的值$+i。有趣的问题是。实际上,我猜OP想知道为什么不附加来自单独的B和C实例的字符串。但除非他提供最新消息,否则我将回答最“明智”的问题。
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());
    }
}