在Java方面,当有人问:
什么是多态性?
重载或重载是可接受的答案吗?
我认为还有更多的原因。
如果你有一个抽象基类,它定义了一个没有实现的方法,而你在子类中定义了这个方法,那么它还会被重写吗?
我认为重载肯定不是正确的答案。
发布于 2008-09-30 20:33:51
表达多态性的最清晰方法是通过抽象基类(或接口)。
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
...
发布于 2008-09-30 19:51:18
多态性是类实例的行为能力,就好像它是其继承树中另一个类的实例,通常是它的祖先类之一。例如,在Java中,所有类都继承自Object。因此,您可以创建一个Object类型的变量,并为其分配一个任何类的实例。
覆盖是出现在继承自另一个类的类中的一种函数。重写函数“替换”从基类继承的函数,但这样做的方式是,即使其类的实例通过多态性假装为不同的类型,也会调用该函数。参考前面的示例,您可以定义自己的类并覆盖toString()函数。因为此函数是从Object继承的,所以如果您将此类的实例复制到Object类型的变量中,它仍然可用。通常,如果在伪装成对象时在类上调用toString(),那么实际触发的toString版本就是在对象本身上定义的版本。但是,因为该函数是一个重写函数,所以即使当类实例的真实类型隐藏在多态性之后时,也会使用类中的toString()定义。
重载是定义具有相同名称但具有不同参数的多个方法的操作。它与重写或多态性无关。
发布于 2012-10-21 13:07:45
多态性是指不止一种形式,相同的对象根据需求执行不同的操作。
多态性可以通过使用两种方式来实现,这两种方式是
overriding
方法重载是指使用相同的方法名在同一个类中编写两个或两个以上的方法,但传递的参数不同。
方法覆盖意味着我们在不同的类中使用方法名称,这意味着在子类中使用父类方法。
在Java中,为了实现多态性,超类引用变量可以保存子类对象。
为了实现多态性,每个开发人员都必须在项目中使用相同的方法名称。
https://stackoverflow.com/questions/154577
复制相似问题