public class OperacionImpl {
public String toString(){
return "Suma";
}
public String toString1(){
return "Resta";
}
}
public class SumaResta extends OperacionImpl {
public String toString(){
return super.toString() +" ó " + super.toString1();
}
}
public class Testeo {
public static void main(String[] args) {
SumaResta sumrest = new SumaResta();
sumrest.toString();
System.out.println(sumrest);
}
}
//el cual imprime por pantalla "Suma ó Resta"
public class Operacion implements BrindaNombreSimple {
//definición de la clase...
//no necesitas definir el método getNombre puesto que ya está en la interfaz
}
public abstract class Operation {
public boolean isArithmeticOperation() {
return true;
}
public abstract String getName();
}
对于扩展层次结构的所有类,已经提供了一个已实现的方法,并且每个类都留有另一个方法来实现:
public class Suma extends Operation {
@Override
public String getName() {
return "suma";
}
}
public class Resta extends Operation {
@Override
public String getName() {
return "resta";
}
}
Concatenation 类不是算术运算,因此它也重写了常用方法:
public class Concatenacion extends Operation {
@Override
public boolean isArithmeticOperation() {
return false;
}
@Override
public String getName() {
return "concatenacion";
}
}
或者简单地使用“super.toString()”,您可以从父类继承 toString 方法,您可以在子类中以自己的方式对其进行修改。很明显,您已经扩展并实现了您想要的类继承。我不能告诉你更多,因为我不知道这是否正是你所要求的。问候伴侣
既然我在这里,万一你不太了解“超级”是如何工作的,我已经为你做了它,让你理解并让事情变得更容易(这是一个愚蠢的例子)
问候,即使您已经知道答案,我也希望对您有所帮助!
如果类名应该总是毫不费力地返回,那么您可以使用反射。像这样在父类中创建一个方法
这避免了覆盖子类的需要。这里有一个例子:
如果您使用 Java 8,则可以通过以下接口以更好的方式增强此功能:
这允许其他类具有相同的功能,而无需从该类继承
Operacion
。您可以覆盖 toString() 方法
利用:
输出:
或者您可以在操作类中创建一个方法并在其子级中覆盖它。
儿童班:
利用:
输出:
秘密是@Override注释
我认为您需要在 Java中应用多态的概念。这基本上是以一般方式定义方法,稍后某个类将负责以具体方式提供功能。
在java中,我们可以通过使用接口或抽象类来应用这个概念。
我什么时候应该使用接口或抽象类?好吧,在我看来,如果你想以一种通用的方式为类的层次结构实现某些方法,你应该使用抽象类,如果你不需要那些通用的方法层次结构,最好用接口来做,让我们去代码,首先用一个抽象类:
对于扩展层次结构的所有类,已经提供了一个已实现的方法,并且每个类都留有另一个方法来实现:
Concatenation 类不是算术运算,因此它也重写了常用方法:
这里我给你做一个测试,以验证我没有骗你:
如果我们使用了一个接口,代码会是什么样子......我们创建我们需要的接口:
层次结构的基类是这样的:
巧合的是 ;),在代码重构之后,测试工作完美,没有任何改变……面向对象是非常强大和美妙的东西。