对象中“对象”数据类型的重要性

时间:2014-01-05 13:32:28

标签: java

public final class Mess {
Object obj1 ;
// rest of the codes
......

请向我解释,因为我是初学者,对象boj1有什么意义? 在一些代码中,我发现他们使用的同一个对象“混乱”,

mess obj = new mess();

我已经理解了这个,但我不确定代码Object obj1创建的是什么类型的变量(或者可能是引用)..,

3 个答案:

答案 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();

此对象只能是MessMess的子类(extends Mess)。它不能是String或任何其他类。

但是当您使用Object类创建对象时:

Object myObj;

它可以是Object的子类:

myObj = new String("I am awesome!");
myObj = new Mess();

但这并不意味着myObj会神奇地变成StringMess。它仍然是Object,但它指的是String对象或Mess对象。

如果您需要将myObj称为StringMess,则必须明确 (因为,对于该计划,它只是一个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