目录
1.多态概述
2.多态的前提和体现
3.多态中成员的访问特点
4.多态的好处和弊端
5.多态的转型
1.多态概述
同一对象,在不同时刻表现出来的不同形态
例如:狗
我们可以说狗是狗:狗 Dog = new Dog();
我们也可以说狗是动物:动物 animal = new 狗();
这里狗在不同的时刻表现出来了不同的形态,这就是多态
2.多态的前提和体现
有继承/实现关系
有方法重写
有父类引用指向子类
public class Animal {
public void eat(){
System.out.println("动物吃东西");
}
}
public class Dog extends Animal{
//方法重写
@Override
public void eat() {
System.out.println("狗吃东西");
}
}
public class Demo {
public static void main(String[] args) {
//有父类指向子类对象
Animal a = new Dog();
}
}
这里我们定义了一个Animal类,一个Dog类,还有一个测试类,Dog类继承了Animal类并对其eat()方法进行重写,在测试类中有父类指向子类对象,这里就体现了多态
3.多态中成员的访问特点
成员变量:编译看左边,执行看左边
成员方法:编译看左边,执行看右边
因为成员方法有重写,而成员变量无重写,所以成员变量和成员方法的访问不一样
4.多态的好处和弊端
好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类作为参数,将来在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类的特有功能
5.多态的转型
向上转型:从子到父,父类引用指向子类对象
向下转型:从父到子,父类引用转为子类对象
public class Animal {
public void eat(){
System.out.println("动物吃东西");
}
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}
public class AnimalDemo {
public static void main(String[] args) {
//父类引用指向子类对象,向上转型
Animal a =new Cat();
a.eat();
}
}
这里我们定义了一个动物类,一个猫类继承动物类,还有一个测试类,我们先用向上转型创建一个对象,然后调用eat()方法。
可以看到输出了重写后的eat()方法,是因为成员方法在访问时看的s是右边,也就是Cat类
当我们调用Cat类中catchMouse方法时,编译器报错
如果想使用Cat类中的特有方法就要使用向下转型
//向下转型
Cat c =(Cat)a;
这时我们再调用Cat中的catchMouse方法就可以使用了



