java语言中的多态概述
2015-03-12 15:00
260 查看
多态:一个对象对应着不同类型
多态在代码中的体现:父类或接口的引用指向其子类对象。
多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
多态的弊端:
前期定义的内容不能使用后期子类中定义的特有内容。
多态的前提:
1,必须有关系,(继承,实现)。
2,要有覆盖。
Animal a =new Cat();
自动类型提升,猫对象提升了动物类型。但是特有功能无法访问。可以限制对特有功能的访问。专业讲:向上转型。将子类型隐藏,就不能使用子类的特有方法。
如果还想用具体动物猫的特有功能,可以将该对象进行向下转型。目的是为了使用子类中的特有方法。
注意:对于转型,自始至终都是子类对象在做着类型的变化。
if (a instanceof Cat){
Cat c=(Cat) a;
}
instanceof:用于判断对象的具体类型(类或是接口),只能用于引用数据类型判断。
通常在向下转型前用于健壮性的判断。
多态时,成员的特点:
1,成员变量
编译时:参考引用型变量所述的类中是否有调用的成员变量,有,编译通过,没有编译失败。
运行时:参考引用型变量所述的类中是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号左边。
2,成员函数(重点)非静态
编译时:参考引用型变量所述的类中是否有调用的成员函数,有,编译通过,没有编译失败。
运行时:参考的是对象所述的类中是否有调用的函数。动态绑定
简单说:编译看左边,运行看右边。
例子:
3,静态函数
编译时:参考引用型变量所述的类中是否有调用的静态方法,有,编译通过,没有编译失败。
运行时:参考引用型变量所述的类中是否有调用的静态方法。
简单说:编译和运行都看左边。
其实对于静态方法,是不需要对象的,直接用类名调用即可。
多态在代码中的体现:父类或接口的引用指向其子类对象。
多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
多态的弊端:
前期定义的内容不能使用后期子类中定义的特有内容。
多态的前提:
1,必须有关系,(继承,实现)。
2,要有覆盖。
Animal a =new Cat();
自动类型提升,猫对象提升了动物类型。但是特有功能无法访问。可以限制对特有功能的访问。专业讲:向上转型。将子类型隐藏,就不能使用子类的特有方法。
如果还想用具体动物猫的特有功能,可以将该对象进行向下转型。目的是为了使用子类中的特有方法。
Cat c = (Cat) a;
注意:对于转型,自始至终都是子类对象在做着类型的变化。
if (a instanceof Cat){
Cat c=(Cat) a;
}
instanceof:用于判断对象的具体类型(类或是接口),只能用于引用数据类型判断。
通常在向下转型前用于健壮性的判断。
多态时,成员的特点:
1,成员变量
编译时:参考引用型变量所述的类中是否有调用的成员变量,有,编译通过,没有编译失败。
运行时:参考引用型变量所述的类中是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号左边。
2,成员函数(重点)非静态
编译时:参考引用型变量所述的类中是否有调用的成员函数,有,编译通过,没有编译失败。
运行时:参考的是对象所述的类中是否有调用的函数。动态绑定
简单说:编译看左边,运行看右边。
例子:
class Outer { void method(){ Object obj =new Object(){ public void show(){ System.out.println("show run"); } }; obj.show();//错误提示,找不到符号 //因为匿名内部类这个子类对象被向上转型成了Object类型。这样就不能再使用子类的特有方法了 } } class InnerClass { public static void main(String [] args) { new Outer().method(); } }
3,静态函数
编译时:参考引用型变量所述的类中是否有调用的静态方法,有,编译通过,没有编译失败。
运行时:参考引用型变量所述的类中是否有调用的静态方法。
简单说:编译和运行都看左边。
其实对于静态方法,是不需要对象的,直接用类名调用即可。
相关文章推荐
- 第一讲 Java语言概述
- Java语言概述
- JVM内存管理------JAVA语言的内存管理概述
- JVM内存管理------JAVA语言的内存管理概述
- Java语言程序设计--基础篇(第八版)第一章概述
- java语言概述与环境的搭建和java语法基础,规范
- 第一讲 Java语言概述
- 黑马程序员--java基础常识与Java语言概述
- java语言程序设计 李元朝 第7章 类的继承和多态机制 练习题答案
- 黑马程序员-学习笔记java基础-语言概述
- 第一章 JavaScript语言概述(下)----JavaScript与JScript,VBScript 和 JavaScript与Java,JavaApplet
- Java语言 -- 多态
- Java模式设计之多态模式与多语言支持
- 黑马程序员-JAVA语言概述,运行环境设置
- JAVA 语言概述
- Java语言介绍(01)概述
- 初学Java语言之多态初体验
- Java模式设计之多态模式与多语言支持
- 【Java教程】第一讲 Java语言概述(2)
- Java语言内存管理概述