当前位置: 首页 > 面试题库 >

Java多态vs重写vs重载

鞠边浩
2023-03-14
问题内容

就Java而言,当有人问:

什么是多态性?

将超载或重载是一个可以接受的答案?

我认为还有更多。

如果你有一个抽象基类,它定义了一个没有实现的方法,并且你在子类中定义了该方法,那该方法是否仍然覆盖?

我认为过载不是肯定的正确答案。


问题答案:

表达多态性的最清晰方法是通过抽象基类(或接口)

public abstract class Human{
   ...
   public abstract void goPee();
}

此类是抽象的,因为该goPee()方法不适用于人类。只有男性和女性子类别才可以定义。同样,人类是一个抽象的概念—你不能创造既不是男性也不是女性的人类。它必须是另一个。

因此,我们通过使用抽象类推迟实现。

public class Male extends Human{
...
    @Override
    public void goPee(){
        System.out.println("Stand Up");
    }
}

public class Female extends Human{
...
    @Override
    public void goPee(){
        System.out.println("Sit Down");
    }
}

现在我们可以告诉充满人类的整个房间撒尿。

public static void main(String[] args){
    ArrayList<Human> group = new ArrayList<Human>();
    group.add(new Male());
    group.add(new Female());
    // ... add more...

    // tell the class to take a pee break
    for (Human person : group) person.goPee();
}

运行此将产生:

Stand Up
Sit Down
...


 类似资料:
  • 也许我对概念感到困惑,但是重写和在子类中创建一个新方法之间有什么区别呢?重写不就是在子类中创建一个不同于父类的新的特定方法吗?但这难道不是在子类中创建一个新方法所要做的吗?

  • 也许我对概念感到困惑,但是重写和在子类中创建一个新方法之间有什么区别呢?重写不就是在子类中创建一个不同于父类的新的特定方法吗?但这难道不是在子类中创建一个新方法所要做的吗?

  • 日安, 我对Java相当陌生。我开始学习的第一门语言是C++。在C++中,我使用了一个新的.cpp文件将代码分散到多个文件中,这样代码就不会太过聚集。我只会在需要的时候使用classes(例如,根据学生的姓名、地址、电话号码等对一所学校的学生进行分类)。但是现在我改成了Java,当我不想对某些东西进行分类时,我很难理解如何使用类。假设我想将代码分散在多个.java文件中,这样它就不会被聚集。当创建

  • 问题内容: 在另一个Bruce Eckel练习中,我编写的代码采用一种方法并更改另一个类中的值。这是我的代码: 它抛出一个错误,提示“可能会丢失精度”。 无法S为S作为呢? 提前致谢 问题答案: 是的,但是您必须指定它们是浮点数,否则将它们视为双精度数: 数字末尾的“ f”使其成为浮点数而不是双精度数。 Java不会自动将double范围缩小为float。

  • 结果: 为什么piF和piD不相等呢?实际上是什么使两者相同?

  • ArrayList和LinkedList有什么区别?我在纽伯顿看了一段视频,但我还是很困惑。请用简单的英语回答。请不要使用任何高级代码。