多态:可以理解为事物存在的多种体现形态。 ---------------------------------- 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类型。向下转型。
复制代码
|