多态 : 一个事物有多种表现形态
编译时多态: 编译是多态是在编译时期就能够察觉的多态 比如 重载
运行时多态: 运行时期才能够直到的多态 向下转型
向上转型: 父类的引用指向子类的实例 简化代码 提高复用性
有缺陷 父类中没有的方法 也就是 子类特有的方法 是不能被调用的
向下转型: 在向上转型的基础之上, 将父类的引用给子类的引用 子类类名 子类对象名 = (子类类名) 父类的引用
向下转型 为了弥补向上转型的缺陷
向上转型和向下转型必须在继承关系中
编译时多态: 编译是多态是在编译时期就能够察觉的多态 比如 重载
运行时多态: 运行时期才能够直到的多态 向下转型
向上转型: 父类的引用指向子类的实例 简化代码 提高复用性
有缺陷 父类中没有的方法 也就是 子类特有的方法 是不能被调用的
向下转型: 在向上转型的基础之上, 将父类的引用给子类的引用 子类类名 子类对象名 = (子类类名) 父类的引用
向下转型 为了弥补向上转型的缺陷
向上转型和向下转型必须在继承关系中
注意: 避免ClassCastException 类类型转换异常
package com.qf.demo4;
/**
* 多态:
* 一个事物有多种形态
* 猫 m = new 猫();
* 动物 d = new 猫();
* 动物 d2 = new 狗();
*
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
// 创建猫的对象
Animal animal = new Cat();
show(animal);
Cat cat2 = new Cat();
show(cat2);
Dog dog = new Dog();
//Animal animal = new Dog();
show(dog);
Monkey mokMonkey = new Monkey();
Animal animal3 = mokMonkey;
Animal animal2 = new Monkey();
show(animal);
// 父类的引用 指向了 子类的实体 现象叫做 向上转型
show(new Cat());// 创建的匿名对象
// 匿名对象 只能使一次 ,因为没有引用 所以不能再次去帮助调用其中的方法
// 在此位置调用猫中的eat方法
new Cat().eat();
show(new Dog());
show(new Monkey());
}
public static void show(Animal cat ){
cat.eat();
cat.sleep();
}
// public static void show(Dog dog){
// dog.eat();
// dog.sleep();
// }
// public static void show(Monkey monkey){
// monkey.eat();
// monkey.sleep();
// }
}
package com.qf.demo4;
public class Monkey extends Animal{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("猴子吃香蕉");
}
@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("猴子倒挂着睡");
}
}
package com.qf.demo4;
public class Cat extends Animal{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("趴着睡");
}
}
package com.qf.demo4;
public class Animal {
public void eat(){
System.out.println("吃");
}
public void sleep(){
System.out.println("睡觉");
}
}