java中上转型的概念_java中的上转型解释(多态的另一种)

本文通过一个实例解释了Java中的上转型概念,即一个BaseClass类型的引用指向Polymorphism对象,展示了在编译时和运行时的不同行为。上转型在编译时只能调用父类方法,但在运行时会根据实际类型执行子类的方法,体现了多态性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们先来看个例子:

public class Polymorphism extends BaseClass{

public String book="轻量级j2ee教程";

public void sub()

{

System.out.println("子类的普通方法");

}

public void test()

{

System.out.println("子类覆盖父类的方法!");

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

BaseClass base=new BaseClass();

System.out.println(base.book);

base.test();

base.base();

Polymorphism subclass=new Polymorphism();

System.out.println(subclass.book);

subclass.test();

subclass.sub();

//test是上转型对象

BaseClass test=new Polymorphism();

//通过引用类型访问变量,只会访问到编译时类型定义的变量,而不会访问执行时定义的变量

System.out.println(test.book);

/**

* test对象的引用类型是BaseClass 但是执行类型是Polymorphism

* 编译阶段只能调用其编译类型所具备的方法,但是运行时则执行它运行时类型所具有的方法

*/

test.base(); //子类没有对应的方法(实际上子类已经继承了父类的base方法),直接调用父类的base方法

test.test(); //子类有覆盖父类的test方法,执行时,直接调用子类的test方法

}

}

class BaseClass

{

public int book=6;

public void base()

{

System.out.println("父类的普通方法");

}

public void test()

{

System.out.println("父类被覆盖的方法!");

}

}

执行结果:

6

父类被覆盖的方法!

父类的普通方法

轻量级j2ee教程

子类覆盖父类的方法!

子类的普通方法

6

父类的普通方法

子类覆盖父类的方法!

从上面的例子可以看出:

对于上转型对象test这个引用类型而言:存在两种类型情况(1,编译时类型   2,运行时类型)

诚然:在编译时,test是BaseClass类型,但是在运行时test是Polymorphism 类型。

对于这种上转型变量而言:在编译的过程中,他只会调用BaseClass中的方法,但是运行时,他会调用Polymorphism 中的方法(包括从父类继承的方法)!

这种上转型,也是多态中的一种!

啥叫多态??

相同类型的变量,调用同意方法时呈现出不同的行为特征,这就会多态(最经常接触的就是:统一方法名,对应不同的参数个数或者参数类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值