本帖最后由 小詹 于 2018-4-5 19:38 编辑
Java多态 • 多态概述 – 某一个事物,在不同时刻表现出来的不同状态。 • 举例 – 猫可以是猫的类型。猫 m = new 猫(); – 同时猫也是动物的一种,也可以把猫称为动物 • 动物 d = new 猫(); • 水在不同时刻的状态 • 多态的前提和体现 – 有继承关系 – 有方法重写 – 有父类引用指向子类对象
多态中成员的访问特点: ·成员变量访问特点 编译看左边,运行看左边 ·成员方法访问特点 编译看左边,运行在右边 为什么成员变量和成员方法的访问不一样呢? 因为成员方法有重写,而变量没有。
多态的好处和弊端: · 多态的好处 - 提高了程序的扩展性 - 具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。 · 多态的弊端 - 不能访问子类特有功能 - 那么如何访问子类的特有功能呢? • 通过多态中的转型
多态中的转型问题: · 向上转型 - 从子到父 - 父类引用指向子类对象 · 向下转型 - 从父到子 - 父类引用转为子类对象 案例: package com.itheima_04; /* * 向上转型 * 从子到父 * 父类引用指向子类对象 * 向下转型 * 从父到子 * 父类引用转为子类对象 */ public class DuoTaiDemo { public static void main(String[] args) { //多态 Animal a = new Cat(); //向上转型 a.eat();
//a.playGame(); //多态的弊端:无法访问子类特有方法 //现在我就想使用子类特有方法,怎么办呢? //创建子类对象就可以了 /* Cat c = new Cat(); c.eat(); c.playGame(); */ //现在的代码虽然可以访问子类的特有功能,但是不合理 //因为我们发现内存中有两个猫类的对象 //这个时候,我们得想办法把多态中的猫对象还原 //这个时候,就要使用多态中的转型了 //父类引用转为子类对象 Cat c = (Cat)a; c.eat(); c.playGame(); } } package com.itheima_04;
public class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); }
public void playGame() { System.out.println("猫捉迷藏"); } } package com.itheima_04;
public class Animal { public void eat() { System.out.println("吃东西"); } }
|