Java多态中向上转型与向下转型

  • (1) 方法的多态性:
    重载overload(返回值类型,参数类型,数目不同,且定义在同一个类中)、重写overide(子类与父类中,相同的方法名,不同的方法体);
  • (2) 对象的多态性:父子类对象的转换;
    向上转型:子类对象变为父类对象,父类 父类对象 = 子类实例,自动转换;
    用法: Father f = new Son();
    向下转型:父类对象变成子类对象,子类 子类对象 = (子类) 父类实例,强制转换;
    Father f = new Son();
    Son s = (Son)f; //必须要先有向上转型,才能向下转型

举例:Father是父类,Son是子类

Father f1 = new Son(); // 这就叫 upcasting (向上转型), 现在f1引用指向一个Son对象

Son s1 = (Son) f1; // 这就叫 downcasting (向下转型),现在f1还是指向Son对象

举例:Father是父类,Son是子类

Father f2 = new Father();

Son s2 = (Son) f2; // 编译不出错,运行时出错(除非子类和父类拥有相同的属性和方法),子类引用不能指向父类对象

注:

  • 向上转型,父类实例只能调用父类与子类共同的成员方法,成员变量只能调用父类的,子类独有的实例变量与实例方法将不能调用,且变量值是父类的,方法的执行方法体是子类的
  • 向下转型,前提是有向上转型,此时对象能够调用子类的成员变量以及独有的成员方法
    例如:Father f1 = new Son(); Son s1 = (Son) f1; 其实就相当于Son s1 = new Son();

猜你喜欢

转载自blog.csdn.net/weixin_43502415/article/details/89480910