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