Java 抽象 class 传递扩展基础的子对象中的任何一个 class
Java abstract class pass either of the child object that extend the base class
我有一个抽象 class,我想在其中创建一个方法,该方法可以传递给扩展它的任一子实例。
例如:
abstract class base
{
public void doSomething(Child1 or Child2){
}
}
class Child1 extends base
{
public void somefunc(){
doSomething(Child1);
}
}
class Child2 extends base
{
public void somefunc(){
doSomething(Child2);
}
}
我觉得有多种方法可以解决这个问题。是否有可能了解可能的方法是什么?我绝对不想在所有子 classes.
中创建相同的函数
看来这就是您要找的东西。
abstract class base
{
public void doSomething(base obj){
}
}
class Child1 extends base
{
public void somefunc(){
doSomething(this);
}
}
class Child2 extends base
{
public void somefunc(){
doSomething(this);
}
}
然后,如果您想在 child 类 中覆盖 doSomething
。
事实上,您甚至不需要 base
参数并传递 this
,您已经有了对 this
的隐式引用。
继承背后的思想之一是在相同抽象类型的 class 之间共享行为。
因此,如果您希望基 class 的所有子类型都具有相同的行为,请在基 class 中实现该方法。您不需要传递对象引用,使用 this
关键字。
如果您想要在您的子 classes 中有不同的行为,请在您的基础 class 中声明方法抽象并在各种子 classes 中实现每个行为。
我不确定传递给 doSomething
的参数应该是 this
,还是相同类型的单独对象。第一种情况,peter.petrov的答案就是你想要的。在第二种情况下,解决此问题的标准方法是使 Base
通用并使用递归绑定。
abstract class Base<T extends Base<T>> {
public void doSomething(T t) {}
}
class Child1 extends Base<Child1> {
public void someFunc() {
Child1 child1 = new Child1();
doSomething(child1);
}
}
class Child2 extends Base<Child2> {
public void someFunc() {
Child2 child2 = new Child2();
doSomething(child2);
}
}
我有一个抽象 class,我想在其中创建一个方法,该方法可以传递给扩展它的任一子实例。
例如:
abstract class base
{
public void doSomething(Child1 or Child2){
}
}
class Child1 extends base
{
public void somefunc(){
doSomething(Child1);
}
}
class Child2 extends base
{
public void somefunc(){
doSomething(Child2);
}
}
我觉得有多种方法可以解决这个问题。是否有可能了解可能的方法是什么?我绝对不想在所有子 classes.
中创建相同的函数看来这就是您要找的东西。
abstract class base
{
public void doSomething(base obj){
}
}
class Child1 extends base
{
public void somefunc(){
doSomething(this);
}
}
class Child2 extends base
{
public void somefunc(){
doSomething(this);
}
}
然后,如果您想在 child 类 中覆盖 doSomething
。
事实上,您甚至不需要 base
参数并传递 this
,您已经有了对 this
的隐式引用。
继承背后的思想之一是在相同抽象类型的 class 之间共享行为。
因此,如果您希望基 class 的所有子类型都具有相同的行为,请在基 class 中实现该方法。您不需要传递对象引用,使用 this
关键字。
如果您想要在您的子 classes 中有不同的行为,请在您的基础 class 中声明方法抽象并在各种子 classes 中实现每个行为。
我不确定传递给 doSomething
的参数应该是 this
,还是相同类型的单独对象。第一种情况,peter.petrov的答案就是你想要的。在第二种情况下,解决此问题的标准方法是使 Base
通用并使用递归绑定。
abstract class Base<T extends Base<T>> {
public void doSomething(T t) {}
}
class Child1 extends Base<Child1> {
public void someFunc() {
Child1 child1 = new Child1();
doSomething(child1);
}
}
class Child2 extends Base<Child2> {
public void someFunc() {
Child2 child2 = new Child2();
doSomething(child2);
}
}