5-7多态

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; //OK

Object objPri = Interger.valueOf(5);
String str = (String)objPri; //编译通过,但运行异常
}
}

instanceof 运算符

用于判断是否能强转,如果能,返回true,否则返回false

if (objPri instanceof String)
{
String str = (String)objPri;
}