继承类或其子类的Java类

时间:2014-10-13 04:43:18

标签: java class inheritance

我有一个提供某些功能的基础class A和一个在B extends A之上提供附加功能的子类A

假设课程CDE扩展A,我将如何构建CD和{ {1}}而是扩展E(不会创建基本上与BCD重复的新类?

除了E扩展C之外,仍然需要扩展D的{​​{1}},EA类。

例如(随意改进):

B

目标是能够创建A = Ball - provides basic things that are shared by all balls B = Beach ball - provides some beach ball specific things C has a method roll() that could allow A or B to roll D has a method bounce() that could allow A or B to bounce E has a method spin() that could allow A or B to spin Any ball can have all, some, or none of the features C, D, and E A类型的对象,其中包含集合B中的要素,而无需为所有可能的组合制作类

6 个答案:

答案 0 :(得分:1)

在java中,类只能扩展一个类。如果你想要扩展B而不是A的C,D和E的实现,你必须创建新的类。

但是,行为可以通过其他类层次结构来控制。

一种选择是将delegation pattern与接口结合使用:

interface MyInterface {
    public void someMethod();
}
class A implements MyInterface {
    public void someMethod() {
        // do something
    }
}
class B extends A {
    public void someMethod() {
        // do something different
    }
}

class C implements MyInterface {
    private final MyIntegerface delegate;
    public C(MyIntegerface delegate) {
        this.delegate = delegate;
    }
    public void someMethod() {
        delegate.someMethod(); 
    }
}

构造C对象的客户端将客户希望C使用的委托传递给它:

C x = new C(new A());
C y = new C(new B());

C类只有一个定义,但它有多种行为方式。

答案 1 :(得分:0)

如果B类扩展A.那么你可以使Classes(C,D和E)扩展为B类而不是A.这三个类(C,D和E)可以使用公共功能(属性和方法)在B和A类(继承层次结构)中都可用。

答案 2 :(得分:0)

B类扩展了A类。因此,A类的所有功能都将在B类中继承。

Class B extends A{}

现在您希望C,D,E类扩展A类和B类的功能,这可以通过简单地扩展B类而不是A类来实现

Class C extends B{}
Class D extends B{}
Class E extends B{}

答案 3 :(得分:0)

直接扩展B类而不是A类。如果你研究this

,你可以更好地理解

答案 4 :(得分:0)

在Ball Class中添加Ball Like roll(),bounce()和spin()的基本功能,因为所有Ball应该具有这三个。并且在B级中扩展A级,这样你可以实例化球和沙滩球,其中球和沙滩球都将具有滚动弹跳,旋转和沙滩球将具有其自身的特征

答案 5 :(得分:0)

我的猜测:

abstract class Ball {

< some common functionality >

}

现在BeachBall是一个具体的类,它是一个特定的球。所以你应该把它作为一个单独的类,现在

:

   class BeachBall extends Ball {

   < some common functionality inherited from Ball >
   <additional functionality>

   }

其他类如C,D,E也是具体的类,并假设它是另一种类型的球,所以:

   class C extends Ball {

   < some common functionality inherited from C >
   <additional C funcionality>

   }

   <other classes are ommited>

或者如果您的C,E,D类是更具体的BeachBall类型,可以这样做:

  class C extends BeachBall {

   < some common functionality inherited from BeachBall & Ball >
   <additional C funcionality>

   }

   <other classes are ommited>

N.B <other classes are ommited>表示同样适用于E,D与C相同。