Java-编译时类型与运行时类型

编译时类型与运行时类型

在Java编程语言中的许多对象都是存在具有父子类型关系的。因为子类也可以理解成另类的一种父类(例如小明是一个学生类 但是他也可以是一个人类)因此在java中是允许父类引用类型指向子类对象的。那么就会出现两种类型。
编译时类型与运行时类型
例如 Person iu=new Student(); 这里是声明了一个Person类型的变量iu 指向了Student对象。那么他在编译时就是Person类型 运行时就是Student类型。
编译时类型:声明该变量时使用的类型决定。
运行时类型:实际给该变量赋值时的对象决定。

当编译时类型与运行时类型不一致时就会出现所谓的多态
因此java允许把一个子类对象直接赋值给一个父类引用变量(Person iu=new Student()😉,无须任何类型转换,这就是向上转型,由系统自动完成。
当在编译阶段引用变量只能调动编译时类型的方法,因此当Person iu=new Student();一个父类person引用变量想要调用子类Student中没有被重写的子类特有方法时就需要强制转换((Studenr)iu).某方法,就叫向下转型

代码实例

//person类
public class Person {
 String name="person";
}
//student类
public class Student extends Person{
 String name="student";

}
//测试类
public static void main(String[] args) {
     Person person=new Student();
     System.out.println(person.name);//输出为person
     System.out.println(((Student)person).name);//输出为student
 }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值