黑马程序员技术交流社区
标题: 多态 [打印本页]
作者: Mayer 时间: 2016-1-27 13:40
标题: 多态
多态:可以理解为事物存在的多种体现形态。
----------------------------------
1,多态的体现
父类的引用指向了自己的子类对象。
//动物 x = new 猫();
----------------------------------
2,多态的前提
1) 必须是类与类之间有关系。要么继承(extends),要么实现(implements)。
2) 通常还有一个前提:存在覆盖(重写)。
3)父类引用指向自己的子类对象
----------------------------------
3,多态的好处
预先定义的程序可以运行后期程序的内容。
多态的出现大大的提高程序的扩展性。
----------------------------------
4,多态的弊端:
虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。不能预先使用子类中定义的特有功能。
----------------------------------
5,多态的应用
在多态中成员函数的特点:
1)对于成员函数:// class Fu{} class Zi extends Fu{} Fu f = new Zi(); f.method();
编译时期:看左边。
运行时期:看右边。
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
2) 在多态中,成员变量(静态成员变量)的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
- public class DuoTai {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Fu f = new Zi();
- System.out.println("num="+f.num+",num1="+f.num1);
- }
-
- }
- class Fu
- {
- int num = 6;
- static int num1 = 7;
- }
-
-
- class Zi extends Fu
- {
- int num = 88;
- static int num1 = 99;
- }
-
复制代码
[size=10.5000pt]3)静态函数:java的静态函数和对象无关,只和声明的类有关,静态函数由类直接引用。
- class Fu
- {
- void method1()
- {
- System.out.println("fu method_1");
- }
- void method2()
- {
- System.out.println("fu method_2");
- }
- static void method4()
- {
- System.out.println("fu method_4");
- }
- }
-
-
- class Zi extends Fu
- {
- void method1()
- {
- System.out.println("zi method_1");
- }
- void method3()
- {
- System.out.println("zi method_3");
- }
-
- static void method4()
- {
- System.out.println("zi method_4");
- }
- }
- class DuoTaiDemo4
- {
- public static void main(String[] args)
- {
- // Fu f = new Zi();
- //
- // System.out.println(f.num);
- //
- // Zi z = new Zi();
-
- //f.method1();
- //f.method2();
- //f.method3();
-
- Fu f = new Zi();
- f.method4();
-
- Zi z = new Zi();
- z.method4();
- }
- }
-
复制代码
4)向下转型
- class Fu{}
-
- class Zi extends Fu{}
- Fu fu= new Zi(); //Zi向上转型为了Fu。向上转型,一般多态都采用这种。
-
- Zi zi = (Zi)fu; //将代表Zi对象的父类引用fu强制转换成了Zi类型。向下转型。
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |