gpt4 book ai didi

java - 这是对 OOP 和 Java 的滥用吗?

转载 作者:行者123 更新时间:2023-12-02 11:21:28 25 4
gpt4 key购买 nike

假设您有这样的类(class):

import java.util.ArrayList;

public class Array
{
private ArrayList<Object> a = new ArrayList<Object>();

public void add(Object element)
{
a.add(element);
}

public void addAll(Object elements[])
{
for (int i = 0; i < elements.length; ++i)
a.add(elements[i]); // this line is going to be changed
}
}

这个派生类:

public class ArrayCount extends Array
{
private int count = 0;

@Override
public void add(Object element)
{
super.add(element);
++count;
}

@Override
public void addAll(Object elements[])
{
super.addAll(elements);
count += elements.length;
}
}

如果在基类中,我们进行以下更改:

  public void addAll(Object elements[])
{
for (int i = 0; i < elements.length; ++i)
add(elements[i]); // this line was changed
}

我希望调用基类中的 add() 方法,而不是派生类中重写的 add() 方法。为什么情况并非如此?这个例子是对 OOP 的滥用吗?

最佳答案

Java 总是会调用运行时类(运行时的真实对象类)的方法实现,只要它是有效的方法重写。这就是所谓的动态绑定(bind)。

您不是在滥用,而是在利用有保证的功能。

您所拥有的设计在 Java 中是合法的,但由于多种原因,这是一种不好的做法,您强调了其中一个重要的原因。这是有时不鼓励实现继承而支持接口(interface)继承的主要原因之一。

关于java - 这是对 OOP 和 Java 的滥用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49887410/

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