多态与类型转化原理分析:
一、多态性:超类(即基类或父类)引用在运行时既能代表超类本身的对象,也能代表其子类(即派生类)的对象的能力。 类的一个成员若想表现多态必须可以被覆盖: 对于成员变量而言,不会发生覆盖现象(会隐藏),在子类出现相同变量的定义时只会隐藏父类变量,因此不会表现多态。同时变量调用在编译时就会解析,不符合动态绑定的特征; 在成员方法中,静态方法和final方法(或private方法,理由:很多人说因为private方法默认是final的,但或者有疑问:请参http://blog.csdn.net/ZangXT/archive/2009/09/03/4514031.aspx)也不会发生覆盖现象(会隐藏),因此也不会表现多态性。 因此只有除静态方法和final方法以外的方法才会表现多态性。
二、向上类型转化时: 丢失添加的方法和字段,剩余的为: 基类字段 基类静态方法或final方法 //前二者为不能被覆盖的成员,因此保留,无多态性 基类其他方法(若被子类覆盖则为子类覆盖的新方法)
package test3;
class oopsuper {
static String str = "父类字段";
public void publicMethod(){System.out.println("父类public方法");}
protected void protectedMethod(){System.out.println("父类protected方法");}//(1)
private void privateMethod(){System.out.println("父类private方法");}
static void staticMethod(){System.out.println("父类静态方法"); }
}
public class oopsub extends oopsuper {
String str = "子类字段";
public void publicMethod(){System.out.println("子类public方法");}
protected void protectedMethod(){System.out.println("子类protected方法");}//(2)
private void privateMethod(){System.out.println("子类private方法");}
static void staticMethod(){System.out.println("子类静态方法"); }
public static void main(String[] args) {
oopsuper upcast = new oopsub();
System.out.println(upcast.str);//方法调用才具有多态性,而域没有多态性
// 能被覆盖的方法的行为才有多态特性
upcast.publicMethod();
upcast.protectedMethod();
// 不能被覆盖的方法[final方法(含私有方法)、静态方法]的行为不具有多态特性
// upcast.privateMethod();访问的是父类的私有方法,不能访问,不具有多态现象
upcast.staticMethod();
}
}
ps:关于JVM的内存机制介绍,请参见http://wenku.baidu.com/view/69d80ca1b0717fd5360cdc23.html
关于父类subobject:这东西很让人头疼,请参见《深度探索C++对象模型》
英文好的请参见http://www.csci.csusb.edu/dick/c++std/cd2/derived.html
|
本文来自: http://hi.baidu.com/zhonghuage/blog/item/87b5c4eadd9c87ded539c905.html
分享到:
相关推荐
Java中的多态性是面向对象编程的一个核心特性,它允许我们使用一个通用的父类引用来操作不同子类的对象,从而实现代码的灵活性和可扩展性。在Java中,多态性体现在两个方面:静态绑定(编译时绑定)和动态绑定(运行...
4.Java多态的体现方式方法的重载,重写,对象的多态性 1.编译时的多态:方法重载(个数、类型、顺序) 2.运行时多态:重写,对象的多态性(父类的引用指向子类的实例) 5.CSDN 1.泛型的好处 保护类型安全 避免...
9. **多态与类型转换**:在继承体系中,子类对象可以被视为父类对象,这就是多态性。向上转型(子类到父类)是自动的,而向下转型(父类到子类)需要强制转换。 10. **枚举类型的转换**:枚举类型是单例的,每个...
而方法重写时,子类方法覆盖父类方法,允许将子类对象作为父类对象处理,体现多态性。 10. **泛型与类型擦除** Java泛型在编译期间进行类型检查,但运行时会进行类型擦除,这意味着在运行时,所有的泛型类型都转换...
你还会接触到抽象类和接口,了解它们在多态性中的作用。异常处理是Java程序健壮性的重要组成部分,你将学习如何使用try-catch-finally语句来捕获和处理运行时错误。在Java集合框架方面,你会接触ArrayList、...
- **多态性**:多态性允许不同子类对象对同一消息作出不同响应,分为编译时的多态(方法重载)和运行时的多态(方法重写)。 2. 访问修饰符 - **public**:任何地方都能访问。 - **private**:只有在同一类中能...
Java中,多态性主要通过方法重载(编译时多态)和方法重写(运行时多态)实现。方法重载是同一类中方法名相同但参数列表不同的方法,而方法重写是子类对父类方法的重新定义。 2. 访问修饰符: - public:任何地方...
在《Java核心技术(卷1)》中,源码涵盖了诸如类和对象、封装、继承、多态性、接口、异常处理、泛型、集合框架、输入/输出、线程等核心概念。 1. 类和对象:Java是一种面向对象的语言,一切皆为对象。类是创建对象...
2. **类与对象**:Java是面向对象的语言,其核心概念包括类的定义、对象的创建、封装、继承和多态性。类是对象的模板,包含属性(成员变量)和方法(函数)。对象则是类的实例,通过new关键字创建。 3. **封装**:...
Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。以下是对这些概念的详细解释: 1. 抽象:抽象是面向对象编程的基础,它涉及将现实世界的问题转化为计算机语言的过程。这包括数据...
9. **继承与多态**:深入理解类的继承关系,接口的使用,以及多态性的实现和意义。 每个章节的课后题通常会设计成各种类型,如选择题、填空题、简答题和编程题,旨在巩固和拓展学生的理论知识和实际编程能力。通过...
学习如何定义类,创建对象,以及理解类和对象之间的关系,如继承和多态性,这些都是Java SE学习的重要部分。 **3. 异常处理** 在Java中,异常处理是程序健壮性的重要组成部分。学会使用try-catch-finally语句块,...
多态性是Java的另一大特点,它允许不同类型的对象对同一消息作出响应。这在处理一组具有相似行为的对象时非常有用。源码中可能包含接口和抽象类的示例,这些都是实现多态性的关键工具。 同时,由于标签中提到了"C++...
Java是一种强类型、面向对象的语言,其主要特点包括垃圾回收机制、类的继承、接口和多态性。学习Java时,首先要理解基本的数据类型(如int、double、char等)、变量、运算符以及控制流程(如if语句、for循环、while...
学习Java面向对象编程,需要掌握如何创建和操作类,理解类与对象的关系,以及如何利用继承和多态性设计高效、可维护的代码。此外,实践是提高编程技能的关键,通过编写实际的Java程序,你可以更好地理解和运用这些...
转换过程中,J2C需要处理Java的一些特性,如垃圾回收、异常处理、多态性等,这些在C++中都有不同的实现方式。同时,Java的面向对象特性,如类、接口、继承、封装和多态,也需要映射到C++的类结构、继承机制、虚函数...
同时,深入理解继承、多态性和组合的概念,有助于设计出更加灵活和可维护的代码。 3. **异常处理**:Java中的异常处理机制允许程序员处理运行时错误,提高程序的健壮性。了解如何使用try-catch-finally语句块,以及...
2. **面向对象编程**:封装、继承、多态是Java的核心特性,笔记可能详细解释了类、对象、接口、抽象类的概念,以及如何实现多态性。 3. **异常处理**:Java中的异常处理机制,如try-catch-finally语句块,以及不同...
- **继承与多态**:子类继承父类的特性,以及多态性的实现,如抽象类和接口。 3. **异常处理**: - **try-catch-finally语句**:如何捕获和处理运行时异常,确保程序健壮性。 - **自定义异常**:学习创建自己的...
《Java实现俄罗斯方块:面向对象编程的智慧结晶》 在计算机科学的世界里,...这个项目涉及了类的设计、接口的使用、多态性以及事件处理等多个核心概念,对于任何想深入学习Java的人来说,都是一个极具价值的实践项目。