Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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_Inheritance - Fatal编程技术网

Java 我可以强制继承类的所有子类继承特定的方法吗?

Java 我可以强制继承类的所有子类继承特定的方法吗?,java,inheritance,Java,Inheritance,所以,我有一个抽象类作为父类,下面是我想要实现的 抽象类: public void run(){ while(!booleanStatement){ //do specific stuff here } } public void run(){ while(!booleanStatement){ doStuff(); } } protected abstract void doStuff(); 儿童班: public clas

所以,我有一个抽象类作为父类,下面是我想要实现的

抽象类:

public void run(){
    while(!booleanStatement){
        //do specific stuff here
    }
}
public void run(){
    while(!booleanStatement){
        doStuff();
    }
}

protected abstract void doStuff();
儿童班:

public class extends parentClass{
public void run(){
    //do child stuff here effected by the while loop above
}
public class extends parentClass{
protected void doStuff() {
    // do something
}

有什么办法可以做到这一点吗?super()可能?

是,调用
super.run()
将执行父级的方法

因此,您可以通过执行以下操作来扩展它:

public void run() {
    super.run();
    //do child stuff
}

是的,调用
super.run()
将执行父方法

因此,您可以通过执行以下操作来扩展它:

public void run() {
    super.run();
    //do child stuff
}

当然。只需定义一个额外的抽象方法:

public final void run(){
  while(!booleanStatement){
    doRun();
  }
}

public abstract void doRun();

在这种情况下,子类不能覆盖
run()
,并且必须为
doRun()
提供一个实现,该实现在循环中执行工作。

当然。只需定义一个额外的抽象方法:

public final void run(){
  while(!booleanStatement){
    doRun();
  }
}

public abstract void doRun();
在这种情况下,子类不能覆盖
run()
,并被迫为
doRun()
提供一个实现,该实现在循环中执行工作。

在抽象类中:

public void run(){
    while(!booleanStatement){
        //do specific stuff here
    }
}
public void run(){
    while(!booleanStatement){
        doStuff();
    }
}

protected abstract void doStuff();
儿童班:

public class extends parentClass{
public void run(){
    //do child stuff here effected by the while loop above
}
public class extends parentClass{
protected void doStuff() {
    // do something
}
类似这样的操作就可以了。

在抽象类中:

public void run(){
    while(!booleanStatement){
        //do specific stuff here
    }
}
public void run(){
    while(!booleanStatement){
        doStuff();
    }
}

protected abstract void doStuff();
儿童班:

public class extends parentClass{
public void run(){
    //do child stuff here effected by the while loop above
}
public class extends parentClass{
protected void doStuff() {
    // do something
}

这样做就可以了。

那么在子类中,我只需要从我的doRun()方法调用run()?您不应该从
doRun()方法中调用它。
doRun()
方法实现了应该在循环中执行的所有内容。从
doRun()
方法调用它可能会导致
StackOverflowException
sSo,这一点需要澄清。子类被迫实现doRun()来处理它们的内容,但只需调用run,然后从循环内部调用doRun()?这是我经常使用的设计模式,尤其是在创建泛型框架类型代码时。我相信这会是装饰师?不管怎样,先生,给你+1。我认为这是一种方法。是的,我非常喜欢这个方法,我想得越多,它在我的脑海中就越好。然后在子类中,我会从我的doRun()方法调用run()?你不应该从
doRun()方法中调用它。
doRun()
方法实现了应该在循环中执行的所有内容。从
doRun()
方法调用它可能会导致
StackOverflowException
sSo,这一点需要澄清。子类被迫实现doRun()来处理它们的内容,但只需调用run,然后从循环内部调用doRun()?这是我经常使用的设计模式,尤其是在创建泛型框架类型代码时。我相信这会是装饰师?不管怎样,先生,给你+1。我想这是一条路。是的,我很喜欢这条路,我想得越多,在我的脑海里就越好。