1:多态的定义
一个对象变量(例如:变量e)可以引用多种实际类型的现象被称为多态(polymorphism)。在运行时能够自动的选择调用哪个方法的现象被称为动态绑定(dynamic binding)。
2:多态只适用于方法,不适用于域。
//父类
class Father {
public int field = 0;
public int getField() {
return field;
}
}
//子类
class Son extends Father {
public int field = 1;
public int getField() {
return field;
}
public int getSuperField() {
return super.field;
}
}
//测试类
public class TestOverride {
public static void main(String[] args) {
Father fa = new Son();//父类应用指向子类对象
Son son = new Son();
System.out.println("super.field="+fa.field+", super.getField()="+fa.getField());
System.out.println("son.field="+son.field+", son.getField()="+son.getField()+", son.getSuperField()"+son.getSuperField());
}
}
//测试结果
super.field=0, super.getField()=1
son.field=1, son.getField()=1, son.getSuperField()0
3:多态即是父类或者接口类型的引用指向子类或实现接口类型的对象;
4:从对象的内存角度来理解试试.
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
Father f = new Father();//系统将分配1M内存.
Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
Son s1 = s;//s1指向那1.5M的内存.
Father f1 = (Father)s;//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).
Son s2 = (Son)f;//这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换.
Son s3 = (Son)f1;//这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存.
分享到:
相关推荐
在Java编程中,多态性(Polymorphism)是面向对象设计的重要特性之一,它允许我们使用一个类的引用去调用子类的方法,从而实现不同的行为。这使得代码更加灵活,可扩展性更强。本实验的目标是深入理解多态性的概念...
Java中的多态性是面向对象编程的一个核心特性,它允许我们设计更加灵活和可扩展的代码。在Java中,多态性(Polymorphism)主要体现在两个方面:方法的重写(Overriding)和接口的实现(Interface Implementation)。...
多态是面向对象编程中的一个重要特性,它允许我们用一个通用的类(即父类)去表示其子类的不同实例。简单来说,多态意味着一个接口可以被不同的实现所使用,这极大地提高了代码的复用性和灵活性。 ##### 定义 多态...
**Java实验报告(2)-多态和继承** 在Java编程语言中,多态和继承是面向对象设计的核心概念,它们极大地增强了代码的灵活性、可重用性和可扩展性。本实验报告将深入探讨这两个关键特性,并通过具体的实例来演示它们...
多态是面向对象编程中的一个重要特性,它允许我们使用一个通用的方式处理不同的数据类型。在Java中,多态主要通过接口和继承机制来实现。多态使得代码更加灵活和可扩展,能够更好地应对需求变化。 #### 二、实验...
此示例模拟一个图形绘制系统,通过抽象类和接口实现多态,不同类型的图形可以根据自身特性进行绘制。
这段代码模拟了一个游戏中的怪物战斗系统,通过接口实现多态,不同类型的怪物可以根据自身特性进行攻击和防御。
Java是一种面向对象的编程语言,其核心特性之一就是对象的继承性。继承允许新创建的类(子类)继承父类的属性和方法,这有助于代码的复用,简化了程序的结构,并增加了代码的可维护性。而多态性则是指允许不同类的...
多态是Java面向对象设计的重要特性,它提供了代码的复用性和灵活性。通过多态,我们可以设计出更加通用的代码,同时保持良好的扩展性。在实际开发中,多态广泛应用于各种场景,如集合框架中的泛型、设计模式等。理解...
Java是一种广泛使用的面向对象编程语言,其面向对象特性是其核心设计原则之一。在这个"290.288.JAVA基础教程_面向对象(中)-多态练习:调用方法和属性(290)"的教程中,我们将深入探讨Java中的多态性,这是面向对象...
在Java中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性使得代码更加灵活,能够处理不同类型的对象,提高代码的复用性。 在Java中,多态分为类多态和接口多态。类多态主要...
在Java中,继承允许一个类(子类)从另一个类(父类)继承特性,而多态则使得不同类型的对象能够共享相同的操作。 ### Java 继承 **1. 继承的定义** 继承是一种“is-a”关系,表示子类是父类的一种特殊情况。子类...
Java中的多态是面向对象编程的关键特性之一,它允许一个接口或者抽象方法被多个不同的类实现,从而使得代码更加灵活且可扩展。多态的概念基于一个接口可以有多种不同的实现方式,增强了程序的多样性和适应性。 在...
面向对象编程是Java的核心特性,其中封装、继承和多态是三大基石。在这个主题中,我们将专注于"多态"这一特性,它是Java编程灵活性和可扩展性的重要体现。 多态(Polymorphism)在希腊语中意为“多种形态”,在编程...
Java编程语言以其强大的功能和广泛的应用而闻名,其中三大特性——封装、继承和多态是其核心概念,对于理解和编写高效、可维护的代码至关重要。 **封装**是面向对象编程的基础,它涉及到将数据(属性)和操作这些...