`

多态:成员变量和成员方法的多态性

阅读更多

1、成员方法的多态性

public class Polymorphism{
	public static void main(String[] agrs){
		BasePolymorphism b = new SubPolymorphism();
		b.method1();
	}
}

class BasePolymorphism{
	public BasePolymorphism(){
		//注意:此处调用的将是子类的method2方法
		this.method2();
	}

	public void method1(){
		System.out.println("BasePolymorphism method1");
		//注意:此处调用的将是子类的method2方法
		this.method2();
		//因为父类的method3方法是私有的,在子类中不可见,所以子类无法覆盖该方法。
		//即使子类中定义了同名方法,也只能算是重新定义了一个方法,该方法也不具有多态性
		//注意:此处调用的是父类的method3方法
		this.method3();
	}
	
	//此方法会被子类的同名方法覆盖
	public void method2(){
		System.out.println("BasePolymorphism method2");
	}
	
	private void method3(){
		System.out.println("BasePolymorphism method3");
	}
}

class SubPolymorphism extends BasePolymorphism{
	//此方法会覆盖父类中的同名方法
	public void method2(){
		System.out.println("SubPolymorphism method2");
	}
	
	//虽然该方法与父类中的方法完全相同,但由于父类中的该方法是私有的,所以此处的方法无法覆盖父类中的同名方法
	//该方法只是子类新定义的一个方法
	public void method3(){
		System.out.println("SubPolymorphism method3");
	}
}
/*
运行结果:
SubPolymorphism method2
BasePolymorphism method1
SubPolymorphism method2
BasePolymorphism method3
*/

/*
分析:
如果子类中的某个方法覆盖父类中的同名方法,那么即使是在父类中调用该同名方法,被调用的方法也是子类中的同名方法、而不是父类中的同名方法。
因此如果要在父类中调用将要被子类重写的方法时,必须格外小心。

父类中的私有方法在子类中是不可见的,所以子类无法覆盖父类中的私有方法。
即使子类定义了和父类的私有方法完全相同的方法,也不会覆盖父类中对应的私有方法,仅仅是在子类中定义了一个新方法。
*/

 

 

2、成员变量的多态性

与成员方法不同,成员变量不具有多态性。通过引用变量来访问它包含的成员变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量。

分享到:
评论

相关推荐

    c++多态性与虚函数练习题

    1、理解多态性的概念。 2、熟练掌握虚函数的作用及其使用方法。 3、掌握静态关联和动态关联的概念和用法。 4、理解纯虚函数和抽象类的概念和用法。 (二)实验内容 1、定义一个类A,在A中有两个私有的整型变量a和b,...

    《java面向对象程序设计-继承和多态》教案.doc

    super () 方法始终指向调用类的父类 调用父类构造方法 演示:示例 3 多态性 2-1 多态性是指¡°多种形式¡± 它使用不同的实例而执行不同操作 多态包括方法重写和方法重载 多态性 2-2 方法重载 2-1 方法重载 2-2 ...

    Java设计一个银行帐户类(继承与多态)

    Java设计一个银行帐户类,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等帐户信息,成员方法包括存款、取款操作。

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    这三个概念是:封装、继承性和多态性。除此以外,还需了解对象、 类、消息、接口、及抽象等概念。 2.2.1 对象 现实世界中的对象具两个特征:状态和行为。例如:自行车有状态(传动装置、步度、 两个车轮和...

    【04-面向对象(上)】

    多态性 •Java 引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类  型决定,运行时的类型由实际赋给该变量的对象决定。 •如果编译时类型和支行时的...

    C++编程思想习题

    1.1.3多态性 1.1.4操作概念:OOP程序像什么 1.2为什么C++会成功 1.2.1较好的C 1.2.2采用渐进的学习方式 1.2.3运行效率 1.2.4系统更容易表达和理解 1.2.5“库”使你事半功倍 1.2.6错误处理 1.2.7大程序设计 1.3方法...

    C++大学教程,一本适合初学者的入门教材(part1)

    10.6 实例研究:利用多态性的工资单系统 10.7 新类和动态关联 10.8 虚析构函数 10.9 实例研究:继承接口和实现 10.10 多态、虚函数和动态关联 小结 术语 自测练习 自测练习答案 练习 第11章 C++输入/输出流 ...

    vc++6.0 程序设计学与用教程

    第8章 类的继承性和多态性 8.1 类的继承 8.2 类的多态 第9章 包、接口和异常 9.1 包 9.2 接口 9.3 异常 第10章 Java系统类库 10.1 Java的类库结构 10.2 语言基础类库 10.3 工具类库 第11章 ...

    C++大学教程,一本适合初学者的入门教材(part2)

    10.6 实例研究:利用多态性的工资单系统 10.7 新类和动态关联 10.8 虚析构函数 10.9 实例研究:继承接口和实现 10.10 多态、虚函数和动态关联 小结 术语 自测练习 自测练习答案 练习 第11章 C++输入/输出流 ...

    C++上机实验报告-实验六.docx

    实验六 多态性 C++上机实验报告-实验六全文共11页,当前为第1页。 C++上机实验报告-实验六全文共11页,当前为第1页。 实验目的 1.掌握运算符重载的方法 2.学习使用虚函数实现动态多态性 实验要求 1.定义Point类,有...

    在一小时内学会 C#(txt版本)

    对 C++ 来说,前面例子中 Date 类的属性就是 day、month 和 year,而你添加了 Get 和 Set 方法。C# 提供了一种更加便捷、简单而又直接的属性访问方式。 所以上面的类应该写成这样: 复制内容到剪贴板 代码: using ...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    7.3.2如何使用多态性 7.3.3父子类对象的类型转换 7.4抽象类和接口 7.4.1为什么需要抽象类 7.4.2为什么需要接口 7.5其他内容 7.5.1final关键字 7.5.2Object类 7.6一些工具的使用 7.6.1将字节码打包发布 ...

    计算机(专升本)Java程序设计复习资料.doc

    方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后 者实现的是运行时的多态性。 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不 同或者二者都不同)...

    AIC的Java课程1-6章

     清楚如何通过向上转型(引用的隐式转型),方法重写,运行期绑定来实现多态性。  体会多态性如何使系统可扩展和可维护。  理解运行时判定引用对象的类型(instanceof),进行强制转型(即引用的显示转型...

    疯狂JAVA讲义

    5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 5.8.1 使用继承的注意点 155 5.8.2 利用组合实现复用 156 学生提问:使用组合关系来实现复用时,需要创建...

    c++学习经典图书:C++ 编程思想(全).rar

    1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 1.2.1 较好的C 3 1.2.2 采用渐进的学习方式 4 1.2.3 运行效率 4 1.2.4 系统更容易表达和理解 4 1.2.5 “库”使你事半功倍 4 1.2.6 错误处理 ...

    Visual.Basic.6大学教程.pdf

    16.11 多态性举例 508 16.12 范例:IShape、CPoint、CCircle 509 16.13 范例:使用多态的支付系统 512 16.14 范例:图形的多态处理 518 16.15 利用接口继承和指派模拟实现继承 522 16.16 Object Browser 527 16.17 ...

    java 面试题 总结

    4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的...

    成绩统计系统C课程设计.docx

    通过课程设计,加深对《C++面向对象程序设计》课程所学知识的理解,熟练掌握和巩固C++语言的基本知识和语法规范,掌握C++语言的基础知识,理解面向对象系统的封装性、继承性和多态性;熟练使用C语言中的函数、数组、...

    C++编程思想.pdf

    1.1.3 多态性 2 1.1.4 操作概念:oop程序像什么 3 1.2 为什么c++会成功 3 1.2.1 较好的c 3 1.2.2 采用渐进的学习方式 4 1.2.3 运行效率 4 1.2.4 系统更容易表达和理解 4 1.2.5 “库”使你事半功倍 4 1.2.6 ...

Global site tag (gtag.js) - Google Analytics