可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
Object obj="Hello";
if(obj instanceof String)
System.out.println("obj对象可以被转换为字符串");
下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?
m=d;
d=m;
d=(Dog)m;
d=c;(子类是否能给子类赋值)
c=(Cat)m;
源代码:
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;
}
原因:子类对象可以直接赋给基类变量。
//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;
}
}
更改之后编译并没有报错,因为没有输出语句,所以没有输出。