它是否将一个对象更改为另一个对象?如果Imonitor
是接口Imonitor[] x = new Imonitor();
是什么意思?这是否意味着我们可以创建接口对象?
答案 0 :(得分:3)
嗯,根据你所谈论的类型,演员会做不同的事情。考虑:
Object x = "hello";
String y = (String) x;
这不会改变对象的类型 - 但是它会将Object
类型的引用转换为引用类型String
的类型,通过检查引用是指String
(或更一般地,是否为强制类型或子类的目标类型)或null。
对于基本类型,它实际上 创建不同类型的新数据值,更改复制的信息,而不仅仅是更改对信息的引用:
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();
...创建具体实现类的实例。
答案 1 :(得分:1)
是否将一个对象更改为另一个对象?
(1)否。对于参考类型
a = (typename)b;
通知编译器您“知道”'b'指向的对象也是'typename'类型的对象。也就是说,它是一个运算符而不是对象。 (对于原始类型,它实际上是转换)。
如果Imonitor是一个接口Imonitor [] x = new Imonitor();手段?
(2)它不会编译。 Imonitor是一个类型名称。 Imonitor []是一组IMonitors。
这是否意味着我们可以创建接口对象?
(3)否。但你可以创建一个对Imonitor的引用数组,这就是
new IMonitor[3]
会做的。
答案 2 :(得分:1)
如果Imonitor
是接口,则new Imonitor();
不起作用。
Imonitor[] x
是Imonitor
- 数组而不是Imonitor
变量。
答案 3 :(得分:1)
转换对象是为了更改编译器认为对象具有的类型(静态类型)并进行检查。当程序运行时,JavaVm会检查强制转换是否有效,如果不是则抛出异常。
接口永远不能是对象,你必须有一个实现接口的类。
答案 4 :(得分:1)
正如其他人所说(我在评论中做过),你不能直接实例化一个界面。我建议你阅读Java接口以便更熟悉它们 - 它们最初可能会令人困惑,但它们是语言的关键部分。
Here is the section在Java教程的接口上。
答案 5 :(得分:0)
类型转换也称为type conversion,它将对象从一种数据类型更改为另一种数据类型。在非原始对象中,对具有某些层次结构特征的对象进行类型转换。示例:Person
对象有2个子类,名为Parent
和Child
(两个子类具有与继承Person
相同的层次结构),因此这是一种有效的类型转换:
Person person = new Parent();
Parent parent = (Parent) person;
对于您的示例,Imonitor[] x = new Imonitor();
将无法编译,因为您将Imonitor
的单个对象分配给期望 Imonitor
数组的实例。< / p>
但这会编译:
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)。
我希望这很清楚。