能夠使用instanceof運算符判斷一個對象是否能夠轉換爲指定的類型:
Object obj="Hello";
if(obj instanceof String)
System.out.println("obj對象能夠被轉換爲字符串");spa
下列語句哪個將引發編譯錯誤?爲何?哪個會引發運行時錯誤?爲何?
m=d;
d=m;
d=(Dog)m;
d=c;(子類是否能給子類賦值)
c=(Cat)m;對象
源代碼:blog
class Mammal{}字符串
class Dog extends Mammal {}編譯
class Cat extends Mammal{}ast
public class TestCastclass
{變量
public static void main(String args[])語法
{im
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;//子類d能夠給父類m賦值
//d=m;
d=(Dog)m;
//d=c;//false
//c=(Cat)m;
}
緣由:子類對象能夠直接賦給基類變量。
//d=m;改成d=m;時運行結果以下:
緣由分析:子類對象能夠直接賦給基類變量。基類對象要賦給子類對象變量,必須執行類型轉換
//d=c; 改成d=c;時報錯,運行結果以下:
緣由分析:基類對象要賦給子類對象變量,必須執行類型轉換,其語法是:子類對象變量=(子類名)基類對象名;
更改後的代碼以下:
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;//子類d能夠給父類m賦值
d=m;
d=(Dog)m;
//d=c;//false 子類不能夠給子類賦值
c=(Cat)m;
}
}
更改以後編譯並無報錯,由於沒有輸出語句,因此沒有輸出。