class root { public void say() { System.out.print("hello\n"); }}
class A extends root { @Override public void say() { System.out.print("world A\n"); }}
class B extends root { @Override public void say() { System.out.print("world B\n"); }}
//abstract class C extends <T> { public void go() { say(); say(); }}
class C <T extends root> { public void go() { say(); say(); }}

public class Template { public static void main(String[] args) {
    C c = new C<A>(); c.say();
    D d = new C<B>(); d.say();
}}


我需要C类,它将同时扩展A和B。(在现实生活中,它们将是水平(A)和垂直(B)滚动视图)。但这不会编译。我浏览了许多可以在Web和SO上找到的示例,但是这些示例都不是可编译程序,它们只会使我越来越困惑。请帮忙!

最佳答案

C类没有say方法,因此代码将永远不会编译。而且,看起来好像没有D类。

为了使其编译,C应该扩展rootC应该具有say方法。

有问题的代码行:

class C <T extends root> { public void go() { say(); say(); }}

C c = new C<A>(); c.say();


您可以对此进行修改,以使其运行:

class C <T extends root> {

    T element;

    public C(T element) { this.element = element; }

    public go() { element.say(); }
}

//...

C c = new C<A>(new A()); c.go();


Perception's comment中所述,您应该查看Oracle提供的Generics教程,以便对此事有更好的了解。

09-10 07:30
查看更多