如何从OBJECT类引用访问对象?

时间:2015-08-25 14:20:40

标签: java

请有人帮忙:

HelloWorld.java

public class HelloWorld {

    public static void main(String []args) {
        System.out.println("Hello World");
        HelloWorld he = new HelloWorld();
        Newfile ne = new Newfile();
        System.out.println(ne.a);
        he.puaa(new Newfile());
    }

    public String puaa(Object o) {
        System.out.println(">> " + o.a);
        return null;
    }
}

Newfile.java

public class Newfile {
    String a="paa";

    public static void main(String []args) {
        System.out.println("Hello World");
    }
}

我正在将NewFile()传递给Object类并尝试使用Object的引用来访问该对象的变量,我正在

HelloWorld.java:12: error: cannot find symbol
System.out.println(">> " +o.a);
^
symbol:   variable a 
location: variable o of type Object

更新:我想将任何对象传递给puaa(Object o)方法,该对象将始终具有变量a。所以解决方案应该是它应该适用于所有人而不仅仅适用于NewFile。

4 个答案:

答案 0 :(得分:1)

Object是一个非常通用的类,它没有任何名为a的字段。你有一些解决方案:

  • 将参数设为NewFile而不是任何对象。在我看来,这是更好的一个,因为显然puaa只能在NewFile对象上运行。

    public String puaa(NewFile o) {
    
  • o投放到NewFile。我不推荐这个,因为如果你传递的东西不是NewFile实例,它会引发异常,所以第一个解决方案比这更好。

    System.out.println(">> " + ((NewFile) o).a);
    

答案 1 :(得分:1)

你做不到。 Object可以是任何内容:StringIntegerHashMapExecutorService ...而且从这4个示例中,没有一个是密切合作的与您的NewFile课程相关。

最好的替代方法是为您的类声明一个超级(抽象)类或接口,并将此超类型的参数传递给该方法。

这是一个小例子:

public abstract class MyFile {
    protected String a;

    public MyFile(String a) {
        this.a = a;
    }

    public String getA() {
        return a;
    }
}

public class NewFile extends MyFile {
    public MyFile(String a) {
        super(a);
    }
}

public class OldFile extends MyFile {
    /* add your implementation... */
}

public class Main {
    public static void main(String[] args) {
        //you can replace here by using new OldFile
        MyFile myFile = new NewFile("foo");
        Main main = new Main();
        main.puaa(myFile);
    }

    public void puaa(MyFile myFile) {
        System.out.println(myFile.getA());
    }
}

答案 2 :(得分:1)

创建界面

public interface HasA { 
  String getA();
}

在要与puaa

一起使用的所有类上添加此接口
public void puaa(HasA o){
  System.out.println(">> " + o.getA());
}

答案 3 :(得分:-1)

您需要将其强制转换为NewFile个对象。它正在查看基础JavaObject以查找不存在的方法a

System.out.println(">> " + ((NewFile)o).a);

您可以尝试逐个播放每个班级,然后抓住ClassCastException,直到您获得所需的课程。