5.7多态
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
5.7.1 多态性
由于类都是引用类型,所以指向的类可以是子类,由此产生多态性。
class BaseClass { public void test() { System.out.println("This is Base method"); } }
public class SubClass extends BaseClass { public void test() { System.out.println("This is Sub method"); } public static void main(String[] args) { BaseClass bc = new BaseClass(); BaseClass sc = new SubClass(); bc.test(); sc.test(); } }
|
5.7.2 引用变量的强制类型转换
由于引用变量只能调用编译时类型的方法,不能调用运行时类型的方法,因此需要强制类型转换。
类型转换运算符的用法是: (type)variable
**注意:**强制类型转换不能将父类转换为子类,除非其实质是一个子类。否则将在运行时引发ClassCastException
异常。
public class ConversionTest { public static void main(String[] args) { Object obj = "Hello"; String objStr = (String)obj; Object objPri = Interger.valueOf(5); String str = (String)objPri; } }
|
instanceof
运算符
用于判断是否能强转,如果能,返回true,否则返回false
if (objPri instanceof String) { String str = (String)objPri; }
|