出于好奇,这是一个问题。
我知道,当我们通过其超类的引用调用子类对象的重写方法时,JVM会重视对象的类型而不是引用的类型。
这是我的简单代码:
class Animal
{
void eat()
{
System.out.println("Animal is eating...");
}
}
class Horse extends Animal
{
@Override
void eat()
{
System.out.println("Horse is eating...");
}
}
public class PolymorphismTest
{
public static void main(String...args)
{
Animal a=new Animal();
a.eat();
Animal h= new Horse();
h.eat();
}
}
如预期的那样,我得到了输出:
run:
Animal is eating...
Horse is eating...
BUILD SUCCESSFUL (total time: 0 seconds)
现在我的问题是,有什么方法可以使用引用h调用超类eat()方法,而不是子类?我知道这是一个与多态性定律背道而驰的问题,但是您永远不知道何时会需要这样做。
我试图将参考h转换为Animal,但没有运气。有任何想法吗?
class Horse extends Animal
{
@Override
void eat()
{
super.eat();
}
}
多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通
这是一个出于好奇的问题。 我知道,当我们通过引用子类对象的超类来调用子类对象的重写方法时,JVM重视对象的类型,而不是引用的类型。 这是我的简单代码: 正如预期的那样,我得到输出: 现在我的问题是,我们有没有办法使用引用h来调用超类ate()方法,而不是子类一?我知道这是一个有点违反多态定律的问题,但你永远不知道什么时候需要这样做。 我试着用打字机把参考h打到动物身上,但没有成功。有什么想法吗?
本小节我们来学习面向对象的最后一大特征 —— 多态。多态是面向对象最重要的特性。我们将介绍多态的概念和特点,并带领大家实现一个多态的案例,你将了解到多态的实现条件、什么是向上转型以及什么是向下转型,并学会使用 instanceof 运算符来检查对象引用是否是类型的实例。 1. 概念和特点 多态顾名思义就是多种形态,是指对象能够有多种形态。在面向对象中最常用的多态性发生在当父类引用指向子类对象时。在
问题内容: 我在使用Gson反序列化json字符串时遇到问题。我收到一系列命令。该命令可以是start,stop或其他类型的命令。我自然具有多态性,并且start / stop命令从command继承。 如何使用gson将其序列化回正确的命令对象? 似乎我只获得基本类型,即声明的类型,而从未获得运行时类型。 问题答案: 根据我的研究以及使用gson-2.0时,你确实不想使用registerType
本文向大家介绍Java中的多态性,包括了Java中的多态性的使用技巧和注意事项,需要的朋友参考一下 多态是对象采取多种形式的能力。当使用父类引用来引用子类对象时,会在OOP中最常见地使用多态。 任何可以通过多个IS-A测试的Java对象都被视为多态的。在Java中,所有Java对象都是多态的,因为任何对象都将通过IS-A测试以了解其自身类型和Object类。 重要的是要知道访问对象的唯一可能方法是
有人能提供一个简单的例子来解释Java中动态多态性和静态多态性之间的区别吗?