public final class Mess {
Object obj1 ;
// rest of the codes
......
请向我解释,因为我是初学者,对象boj1有什么意义? 在一些代码中,我发现他们使用的同一个对象“混乱”,
mess obj = new mess();
我已经理解了这个,但我不确定代码Object obj1
创建的是什么类型的变量(或者可能是引用)..,
答案 0 :(得分:1)
Object
class是Java中所有类的父类。根据Java继承语法,父类引用可以保存其任何子类的实例。所以在需要保存任何子类/任何类型的地方使用对象类型。它有很多用法,例如Factory实现。
答案 1 :(得分:1)
Object obj1 ;
它就像任何其他可以是Object类型的实例成员一样。现在它可以保存任何Object,因为它的类型是java中所有类的超类。
可能是代码中的其他地方,他们可以将该变量分配给任何类。
离
Object obj1 = new String("");
但它的味道确实像设计中的缺陷。
因为它的类型是Object,并且肯定应该转换为受尊重的对象类型以使用它。
答案 2 :(得分:1)
您在Java中创建的所有类(如Mess
)都是Object
的子类。
当您按照以下方式编写课程时:
public final class Mess {
对于Java,它实际上意味着以下内容(尽管您没有编写extends
部分):
public final class Mess extends Object {
使用Mess
类创建对象时:
Mess myMess = new Mess();
此对象只能是Mess
或Mess
的子类(extends Mess
)。它不能是String
或任何其他类。
但是当您使用Object
类创建对象时:
Object myObj;
它可以是Object
的子类:
myObj = new String("I am awesome!");
myObj = new Mess();
但这并不意味着myObj
会神奇地变成String
或Mess
。它仍然是Object
,但它指的是String
对象或Mess
对象。
如果您需要将myObj
称为String
或Mess
,则必须明确 (因为,对于该计划,它只是一个Object
):
myObj = new String("I am awesome!");
myObj.toString(); //OK, it calls Object.toString
//myObj.substring(5, 12); //** COMPILE ERROR, there is no Object.substring
String myString = (String)myObj;
myString.substring(5, 12); //OK, it calls String.substring
myObj = new Mess();
//myObj.cleanItUp(); //** COMPILE ERROR, there is no Object.cleanItUp
Mess myMess = (Mess)myObj;
myMess.cleanItUp(); //OK, it calls Mess.cleanItUp
myString = (String)myObj; //** RUNTIME ERROR, myObj is not a String
您也可以这样投射:
myObj = new String("I am awesome!");
myObj.toString(); //OK, it calls Object.toString
//myObj.substring(5, 12); //** COMPILE ERROR, there is no Object.substring
((String)myObj).substring(5, 12); //OK, it calls String.substring
myObj = new Mess();
//myObj.cleanItUp(); //** COMPILE ERROR, there is no Object.cleanItUp
((Mess)myObj).cleanItUp(); //OK, it calls Mess.cleanItUp
((String)myObj).substring(5, 12); //** RUNTIME ERROR, myObj is not a String