向上转型方法与作用
📋格式
父类名 引用变量名= new 子类名()
向上转型的作用在于让代码复用,提高代码简洁性,同个继承链的类可以用同个顶层类型表示参数。
如将子类对象作为实参,传进父类为形参的函数,即可不必为每一个子类都写一个子类形参的函数。
向上转型后方法调用
向上转型后,引用变量调用方法,调用的是子类覆盖或继承的方法,并非原先父类的方法。
但向上转型后,无法通过引用变量调用子类特有的方法,即便是父类中有同名抽象方法也不行。
注意,在一些早期的 Java 版本中,虚拟机可能允许在父类引用变量上调用子类的特定方法,但这是不被推荐的,并且已经被更严格的 Java 规范所取代
测试代码
public class MainClass {
public abstract class Parent
{
public void f1(){System.out.println("调用父类方法1");}
public abstract void f2();
}
public class Child extends Parent
{
public void f1(){System.out.println("调用子类方法1");}
public void f2(){System.out.println("调用子类方法2");}
}
public static void main(String[] args) {
MainClass ms=new MainClass();
Parent p=ms.new Child();
p.f1();//p.f1()输出结果是"调用子类方法1"
//无法调用p.f2();
}
}