多态:同一个符号在不同语义环境下具有不同的解释
1、接口和实现接口并覆盖接口中同一个方法的几种不同的类体现的。
2、父类和继承父类并覆盖父类中同一方法的几个不同子类实现的。
基本概念
多态性:在同一个时刻,体现出来的不同状态;
通过将子类对象引用赋值给父类对象引用变量来实现动态方法调用
1、如果a是类A的一个引用,那么a可以指向类A的一个实例,或者说指向类A的一个子类。
2、如果a是接口A的一个引用,那么a必须指向实现了接口A的一个类的实例。
class Fu{ int num = 20 ; public void show() { System.out.println("show Fu...."); } public Fu(){ } public static void function() { System.out.println("function Fu..."); } } //子类 class Zi extends Fu{ int num = 30 ; public void show() { System.out.println("show Zi...."); } public static void function() { System.out.println("function Zi..."); } public void method() { System.out.println("----4"); } } //测试类 public class DuoTaiDemo { public static void main(String[] args) { //创建对象,通过子类创建对象 Fu f = new Zi() ; System.out.println(f.num); f.show(); f.function(); } }
向上转型
子类自有的方法不可见
1)、代码检查不允许。
2)、从实际意义上
- A a = new B();
- a.f(); //调用子类的f()方法
- a.f(new Two()); //编译错误(定义一个A类引用,JVM解释a.f(new Two())方法时,A类没有这个方法)
向下转型
存在于继承中,父类引用指向的对象实际是要转型的子类引用的类型。
- 1) Animal a = new Dog();
- Dog d = (Dog) a; //正确
- 2) Animal a = new Cat();
- Dog d = (Dog) a; //抛异常