gpt4 book ai didi

java - 在不修改类本身的情况下编辑类中的返回值?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:46:59 26 4
gpt4 key购买 nike

好吧,假设我有一个名为 Pancake 的类(class)。

Pancake.java 看起来像这样:

public class Pancake {
public boolean shouldEat() {
return false;
}
}

现在,我根本不想编辑 Pancake.java。我想要做的就是更改 shouldEat() 从不同的类返回的内容,例如“NotPancake.java”。

我知道我是否有类似的东西

public boolean eat = false;

我可以很容易地通过像 Pancake.eat = true 这样的事情来改变它,但是有什么方法可以改变 shouldEat() 返回的内容而不编辑类以类似的方式?

谢谢。

最佳答案

这样做的方法是基于 Object Oriented programming

public class NotPancake extends Pancake {

@Override
public boolean shouldEat() {
return true;
}
}

这里发生的魔法称为“继承”,是分配给 OO 的四个元素之一。

这里发生的是您定义从 Pancake 交付的新结构。

这意味着 NotPancake 继承了 Pancake 的形式。所以 NotPancake 就是 Pancake。

 Pancake p = new Pancake();
Pancake q = new NoPancake();

print(p.shouldEat()); //Will be false
print(q.shouldEat()); //Will be true

这种关系给了我们改变行为的可能性,我们可以重新定义父类(super class)中所有的公共(public)、保护和默认方法。

当我们在子类中定义一个具有相同签名的方法时,我们说这个方法覆盖了前一个方法。在 Java 中,您应该添加注释 @Override 以额外通知编译器。

这是一种方法。继承很简单,但在编写复杂程序时会产生很多问题,另一种解决方案称为 composition .并且您应该始终更喜欢组合而不是继承。

构图以抽象为主。要使用它,需要一个接口(interface)。接口(interface)是对实现它的类所遵循的契约的描述。

public interface Dish {

boolean isEatable();

}

接口(interface)的名称应该代表一些抽象的通用概念。

 public class Pancake implements Dish {
@Override
public boolean shouldEat() {
return false;
}
}

public class Carrot implements Dish {

@Override
public boolean shouldEat() {
return true;
}
}

用法大致相同。

 Dish dish1 = new Pancake();
Dish dish2 = new NoPancake();

print(dish1.shouldEat()); //Will be false
print(dish2.shouldEat()); //Will be true

在这个小例子中很难展示组合的好处。但显示的是 coding to interface方法。

关于java - 在不修改类本身的情况下编辑类中的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22052797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com