面向对象(上)-2

Java多态与类型转换
本文介绍了Java中的多态概念及其实现方式,探讨了引用变量如何调用方法,并解释了强制类型转换的规则及其注意事项。此外,还详细说明了instanceof运算符的使用场景与限制条件。

多态

引用变量在编译阶段只能调用编译时类型所具有的方法,但运行时执行他运行时所具有的而方法。因此在编写java代码时,引用变量只能调用声明该变量时所用类里包含的方法。例如,通过Object p = new Person()定义一个变量p,这个p只能调用Object里面的方法而不能调用Person里面的方法。

 

强制类型转换

进行强制类型转换时需要注意:

基本类型转换只能在数值类型之间进行,包括整数型、字符型和浮点型。数值型和布尔型之间不能进行类型转换。

引用类型之间的转换只能是在具有继承关系的两个类型之间进行,否则会出现编译错误。

当把一个子类对象赋值给父类引用变量时,被称为向上转换,这种转换总是可以成功的。当把一个父类实例转换成子类类型时,这个对象必须是子类实例才行(即编译时是父类类型,而运行时类型是子类类型,否则将在运行时引发ClassCastExcept异常)

 

Instanceof运算符

Instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类,用于判断前面的对象是否是后边的类,或者其子类、实现类的实例。如果是,返回true,否则返回false

Instanceof运算符前面的操作数的编译时类型要么与后边的类相同要么与后面的类具有继承关系,否则会引起编译错误。

public static void main(String[] args) 

{

//声明hello时使用Object类,则hello的编译类型是Object

//Object是所有类的父类 hello变量的实际类型是String

Object hello = "Hello";

//StringObject类的子类,可以进行instanceof运算。返回true

System.out.println("字符串是否是Object类的实例:"

+ (hello instanceof Object));

//返回true

System.out.println("字符串是否是String类的实例:

+ (hello instanceof String));

//MathObject类的子类,可以进行instanceof运算。返回false

System.out.println("字符串是否是Math类的实例:

+ (hello instanceof Math));

//String实现了Comparable接口,所以返回true

System.out.println("字符串是否是Comparable接口的实例:

+ (hello instanceof Comparable));

String a = "Hello";

//String类既不是Math类,也不是Math类的父类,

//所以下面代码编译无法通过

System.out.println("字符串是否是Math类的实例:"

+ (a instanceof Math));

}

 

初始化块

初始化块是java类里面可以出现的第四种成员(前面一次有成员变量 方法和构造器)

初始化块和构造器作用非常相似,它是构造器的补充,。初始化块总是在构造器之前执行,与构造器不同的是初始化块是一段固定执行的代码,不接受任何参数。因此初始化块对同一个类的所有对象所进行的初始化处理完全相同。

所以如果有一段初始化处理代码对所有的对象完全相同,且不需要接受任何参数,就可以把这段初始化处理代码提取到初始化块中。这样可以更好的提高初始化代码的复用,提高整个应用的可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值