2011-08-05 43 views

回答

1

它是否将一个对象更改为另一个对象?

(1)号对于引用类型

a = (typename)b; 

告知编译器,你“知道”哪些“B”指向的对象也是类型“类型名称”的对象。也就是说,它是一个运算符而不是对象。 (对于原始类型,它实际上是一种转换)。

如果iMonitor的是一个接口什么呢iMonitor的[] X =新的iMonitor();手段?

(2)它不会编译。 Imonitor是一个类型名称。 Imonitor []是一系列IMonitors。

这是否意味着我们可以创建接口的对象?

(3)不可以,但你可以创建引用数组来iMonitor的,这是什么

new IMonitor[3] 

会做。

+2

考虑扩大不同的主题。 – 2011-08-05 06:23:48

1

如果Imonitor是接口,则比new Imonitor();不起作用。

Imonitor[] xImonitor -array而不是Imonitor变量。

1

如果Imonitor是一个接口,则新的Imonitor()将不起作用 - 您将收到编译错误。

转换对象的方法是更改​​编译器认为该对象具有的类型(静态类型)并进行检查。当程序运行时,JavaVm会检查转换是否有效,如果不是,则抛出异常。

接口不能是对象,你必须有一个实现接口的类。

1

正如其他人所说(我在我的评论中),你不能直接实例化一个接口。我建议你阅读Java界面,以便更熟悉它们 - 它们可能首先会让人困惑,但它们是语言的关键部分。

Here is the section在Java教程的接口上。

3

那么,铸造会根据你正在谈论的类型做不同的事情。试想一下:

Object x = "hello"; 
String y = (String) x; 

即不改变对象的类型 - 但它转换参考Object类型来String类型的参考,通过检查引用或者指String(或者更一般地说,演员或演员的目标类型)或为空。

对于原始类型,它实际上创建不同类型的新数据值,改变复制的信息而不是仅仅改变到的信息的基准:

double x = 10.5; 
int y = (int) x; // The value of y is 10; x is unchanged though. 

关于接口:

Imonitor[] x = new Imonitor(); 

这不会直接编译。但是,这会:

Imonitor[] x = new Imonitor[2]; 

这不是创造Imonitor本身的任何实例 - 它只是创造一个阵列有两个“插槽”可容纳引用的贯彻Imonitor类型的对象。这两个插槽中的初始值将为null;你可能会像这样填充数组:

x[0] = new FirstImplementation(); 
x[1] = new SecondImplemnentation(); 

...创建具体实现类的实例。

0

类型转换也被称为type conversion,它将对象从一种数据类型更改为另一种。在非原始对象中,类型转换是在具有某些层次结构特征的对象上完成的。例如:甲Person对象2子类称为ParentChild(均为亚类具有相同的hierchical结构,因为它们继承Person),因此,这是一个有效的类型转换:

Person person = new Parent(); 
Parent parent = (Parent) person; 

对于示例,Imonitor[] x = new Imonitor();不会作为编译您正在将Imonitor的单个对象分配给预计的一个实例Imonitor的数组。

但是,这将汇编:

Imonitor[] x = new Imonitor[2]; //Assigning 2 elements to array 'x' 

假设你有一个接口:

public interface IMonitor { 

    public void monitor(Monitorable object) throws MonitorException; 
} 

那么这将不会是一个类型铸实施例,而是一个任务:

IMonitor x = new IMonitor() { 
      public void monitor(Monitorable object) throws MonitorException { 
       //Implementation done here... 
      } 
     }; 

(上面的例子演示了anonymous class)。

我希望这很清楚。

相关问题