当前位置: 技术问答>java相关
简单,白拿分(50分,弯个腰就有了)
来源: 互联网 发布时间:2015-06-24
本文导语: class Animal{} class Mammal extends Animal{} class Cat extends Mammal{ } class Dolphin extends Mammal{ public static void main(String s[]){ Mammal m=new Cat(); Animal a=m; Dolphin d=(Dolphin)a; } } ...
class Animal{}
class Mammal extends Animal{}
class Cat extends Mammal{ }
class Dolphin extends Mammal{
public static void main(String s[]){
Mammal m=new Cat();
Animal a=m;
Dolphin d=(Dolphin)a;
}
}
为什么这个通过编译后,运行确抛出个castException的异常,不是已经强制转化了嘛?为什么还会抛出异常呢?
class Mammal extends Animal{}
class Cat extends Mammal{ }
class Dolphin extends Mammal{
public static void main(String s[]){
Mammal m=new Cat();
Animal a=m;
Dolphin d=(Dolphin)a;
}
}
为什么这个通过编译后,运行确抛出个castException的异常,不是已经强制转化了嘛?为什么还会抛出异常呢?
|
to peppi(一凡):你说的大的,小的是分别指子类和父类吗?
子类的对象是可以被一个声明为父类的引用变量引用的,
Mammal m=new Cat();
但只有原来是子类对象被声明为父类的对象才可以强制转换成原来的子类,
Cat n=(Cat)m;
不知道说明白了没有
子类的对象是可以被一个声明为父类的引用变量引用的,
Mammal m=new Cat();
但只有原来是子类对象被声明为父类的对象才可以强制转换成原来的子类,
Cat n=(Cat)m;
不知道说明白了没有
|
同意楼上。
java里面类型转化分implicit和explicit两种类型。
从子类转化为父类,一般都采用implicit
例如上面的:Mammal m=new Cat();
Animal a=m;
从父类转换为子类,必须采用explicit
例如:Cat b = (Cat)a;
但平级类之间比如Cat类和Dolphin类,即使强制转换也不一定可以。上面虽然Object a 是 Animal 类,但它其实是由Cat类转换过来的,Cat类与Dolphin类同属于Mammal类的子类,所以编译时不出错,出现运行时错误。
java里面类型转化分implicit和explicit两种类型。
从子类转化为父类,一般都采用implicit
例如上面的:Mammal m=new Cat();
Animal a=m;
从父类转换为子类,必须采用explicit
例如:Cat b = (Cat)a;
但平级类之间比如Cat类和Dolphin类,即使强制转换也不一定可以。上面虽然Object a 是 Animal 类,但它其实是由Cat类转换过来的,Cat类与Dolphin类同属于Mammal类的子类,所以编译时不出错,出现运行时错误。
|
因为Dolphin中可能会有Animal中没有的属性,所以java中的这种转化是不可以的.
反过来则行,就象你的Animal a=m;
理解一下交集的概念,你就明白了.
反过来则行,就象你的Animal a=m;
理解一下交集的概念,你就明白了.
|
只能由上往下造型匹配!
Dolphin->Mammal->Animal
Cat->Mammal->Animal
由上面可以看出,cat和Dolphin是完全不同的一个类,它们只有一部分方法和属
性是相同的;所以不能相互转化!
Dolphin->Mammal->Animal
Cat->Mammal->Animal
由上面可以看出,cat和Dolphin是完全不同的一个类,它们只有一部分方法和属
性是相同的;所以不能相互转化!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。