Java 如何使用作为另一类函数的参数访问的对象的函数?

Java 如何使用作为另一类函数的参数访问的对象的函数?,java,object,methods,Java,Object,Methods,这就是我努力实现的目标: public class cls1{ public cls1(){} //constructor for the sending class String name = "foo"; //String I wish to access public String sentName(){ //Method to access the string out

这就是我努力实现的目标:

public class cls1{
  public cls1(){}                        //constructor for the sending class
  String name = "foo";                   //String I wish to access
  public String sentName(){              //Method to access the string outside
    return name;
  }
}

public class cls2{                       //Class where I wish to access the name
  public String gotName(Object obj){     //Method where I wish to call the cls1 instance
    String recvName;                     
    if(obj.getClass()==cls1.class){
      recvName = obj.sentName();         //THE PROBLEM
    }
    return recvName;
  }
}
我确实理解,
obj
在运行时之前不会有cls1的方法和变量,因此不允许编译该行。有没有办法做到这一点

另外,我还尝试在
cls2
中创建
cls1
的实例:

cls1 cls1Inst;
obj=cls1Inst;
cls1Inst.sentName();
但这会产生一个nullpointer异常,可能是因为我试图访问cls1的方法,而没有实际创建它的实例(我不太清楚nullpointer,请原谅我的愚蠢)


任何帮助都将不胜感激。

对象是每个对象的基类。首先,您必须键入
cls1
,然后将提供
cls1
方法

改变

recvName = obj.sentName(); 

在这个代码中

cls1 cls1Inst;  // here it is uninitilized (null)
obj=cls1Inst;    //<------ after this statement cls1Inst will be same and null
cls1Inst.sentName();// thats why it throws null pointer exception
已更新

或者,您可以将函数参数类型从
Object
更改为
cls1
。这可以避免检查类类型的额外检查。请参阅下面的代码

public String gotName(cls1 obj){                     
      return obj.sentName();// No need to check class type. just return name
  } 
不能对对象类对象调用sentName()。您需要先将其键入cls1类

public class cls2{                       //Class where I wish to access the name
  public String gotName(Object obj){     //Method where I wish to call the cls1 instance
    String recvName;                     
    if(obj.getClass()==cls1.class){
      cls1 cls1Obj = (cla1)obj;
      recvName = cls1Obj.sentName();         //THE PROBLEM
    }
    return recvName;
  }
}

这很有效,非常感谢。如果可以的话,你如何使用第二种方法或完全偏离轨道的方法获得相同的响应?@ElysianStorm你所说的第二种方法是什么意思?bdw见更新答案。如果你有任何困惑,那么问我。你的更新就是我所说的,谢谢伙计!实际上,在接收方法中使用正确的类型会更好!如果这是不可能的,你最好检查的类型,因为它在其他答案做@是的,那将是一个很好的方法。请参阅更新的答案:)谢谢您在哪里调用
cls2.gotname(obj)
?我需要这个方法,我没有在这里调用它是为了问题的简单性。在这种情况下,instanceof也可以工作,并且可能比直接比较类提供更好的结果。@jokster,同意您的看法。
public String gotName(cls1 obj){                     
      return obj.sentName();// No need to check class type. just return name
  } 
public class cls2{                       //Class where I wish to access the name
  public String gotName(Object obj){     //Method where I wish to call the cls1 instance
    String recvName;                     
    if(obj.getClass()==cls1.class){
      cls1 cls1Obj = (cla1)obj;
      recvName = cls1Obj.sentName();         //THE PROBLEM
    }
    return recvName;
  }
}