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是一种广泛使用的面向对象编程语言,其面向对象特性是其核心设计原则之一。在这个"290.288.JAVA基础教程_面向对象(中)-多态练习:调用方法和属性(290)"的教程中,我们将深入探讨Java中的多态性,这是面向对象...
在Java中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性使得代码更加灵活,能够处理不同类型的对象,提高代码的复用性。 在Java中,多态分为类多态和接口多态。类多态主要...
在Java中,继承允许一个类(子类)从另一个类(父类)继承特性,而多态则使得不同类型的对象能够共享相同的操作。 ### Java 继承 **1. 继承的定义** 继承是一种“is-a”关系,表示子类是父类的一种特殊情况。子类...
面向对象编程是Java的核心特性,其中封装、继承和多态是三大基石。在这个主题中,我们将专注于"多态"这一特性,它是Java编程灵活性和可扩展性的重要体现。 多态(Polymorphism)在希腊语中意为“多种形态”,在编程...
Java编程语言以其强大的功能和广泛的应用而闻名,其中三大特性——封装、继承和多态是其核心概念,对于理解和编写高效、可维护的代码至关重要。 **封装**是面向对象编程的基础,它涉及到将数据(属性)和操作这些...
Java中的多态性是面向对象编程的一个核心特性,它允许我们使用父类引用指向子类对象,从而实现灵活的代码设计。多态性分为编译时多态和运行时多态,其中运行时多态是Java中最常见的形式,也称为动态绑定。在深入探讨...
在Java编程语言中,继承、多态、重写、修饰符以及`super`和`this`的使用是面向对象编程的核心概念。这些知识点对于理解和编写高效、可维护的代码至关重要。 1. **Java继承**: Java继承允许一个类(子类)继承另一...
在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用父类类型的引用指向子类的对象,这样就可以通过父类引用调用子类重写的方法,从而实现不同的行为...
Java继承和多态机制是面向对象编程中的核心特性。继承让我们可以构建一个层次化的类结构,通过子类复用和扩展父类的功能,而多态和动态绑定则让我们的程序更加灵活,能够适应不断变化的需求。正确理解和运用这些概念...
Java中的多态是面向对象编程的关键特性之一,它允许一个接口或者抽象方法被多个不同的类实现,从而使得代码更加灵活且可扩展。多态的概念基于一个接口可以有多种不同的实现方式,增强了程序的多样性和适应性。 在...
Java多态是面向对象编程中的一个核心特性,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要通过继承、接口和方法重写(Override)来实现。这里我们将深入探讨从虚拟机(JVM)的角度来看,Java...
通过阅读和实践这些代码,可以更好地理解和应用Java的继承和多态特性。 总的来说,Java的继承和多态性是构建复杂、可扩展软件系统的基础。这个压缩包中的简单程序,结合博客资料,为初学者提供了一个很好的学习起点...
Java中的多态性是面向对象编程的一个核心特性,它允许我们使用父类类型的引用操作子类的对象,从而实现代码的灵活性和可扩展性。多态存在的三个基本条件是:继承、方法重写以及父类引用指向子类对象。在实际应用中,...
Java_oop(多态)小练习题:主要练习Java面向对象的特性-多态 定义游戏类-针对不同英雄的攻击 以前需要针对每种英雄进行设计方法:繁琐,不利于扩展 ...... 如何整合,考虑开闭原则(向上造型)