1.什么是多态
- 一个对象在不同时刻体现出来的不同形态。
- 举例:水: 加热(水蒸气) 降温(冰块)
2.多态的前提
- 有继承、实现关系
- 有方法重写
- 父类的引用指向子类的对象。----》父类 父类的对象 = new 子类();
public class AnimalTest {
public static void main(String[] args) {
// 3 父类的引用指向子类的对象
// 多态形式对象
Animal a = new Cat();
}
}
class Animal{
public void eat(){
System.out.println("吃东西");
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼....");
}
多态的成员访问特点
- 构造方法:和继承一样
- 成员变量:编译看左边,执行看左边
- 成员方法:编译看左边,执行看右边
public class MemberTest {
public static void main(String[] args) {
// 父类的引用指向子类的对象
Fu f = new Zi();
// 多态对象调用成员变量
System.out.println(f.num);
// 多态对新乡调用调用成员方法
f.show();
// 多态对象不能调用子类特有的方法
// f.show2();
}
}
class Fu {
int num = 100;
public void show() {
System.out.println("父类的show方法");
}
}
class Zi extends Fu {
int num = 10;
public void show() {
System.out.println("子类的show方法");
}
public void show2(){
System.out.println("子类特有的方法");
}
多态的优缺点
优点:提高代码的扩展性
缺点:不能调用子类特有功能
多态的转型
- 向上转型:把子类类型数据转换成父类类型数据 Animal a = new Cat();自动类型转换
- 向下转型: 把父类类型数据转换成子类类型数据 Cat cat = (Cat)a; 将大的级别转给小的。进行强制类型转换!
常见异常