在这两个类中,我已经从main方法在TestClass的getName方法中传递了TestClassTwo的对象,现在我想使用对象obj调用getTwoName方法。有人可以帮助我。谢谢 //下面是代码 // class1
package Test;
public class TestClassTwo {
public static String getTwoName()
{
return "2nd";
}
}
// class2
包测试;
公共类TestClass {
public void getName(Object obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
// call getTwoName method of TestClassTwo using obj object
}
public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
TestClass tc=new TestClass();
tc.getName(new TestClassTwo());
}
}
答案 0 :(得分:2)
将Object
(超类)强制转换为TestClassTwo
(子类):
String name = ((TestClassTwo) obj).getTwoName();
或:
TestClassTwo temp = (TestClassTwo) obj
String name = temp.getTwoName();
请注意,使用实例调用静态方法是没用的。而是使用类名来调用静态方法:
String name = TestClassTwo.getTwoName();
答案 1 :(得分:0)
为什么呢?您不需要使用任何对象,因为该方法是静态的。使用对象来调用此方法是徒劳的。只需写下TestClassTwo.getTwoName()
。
[我强烈怀疑你的问题有问题。]
如果你真的需要通过该类的对象访问未知类的静态方法,那么你就是这样做的:
String twoName = obj.getClass().getMethod("getTwoName").invoke(null);
答案 2 :(得分:0)
正如其他人所说,如果您打算静态访问该方法,则不需要实例,因此您根本不需要TestClass#getName
中的参数。但是,如果您确实希望它是实例方法,则可以执行以下三种操作之一:
1)参加 TestClassTwo
TestClass#getName
:
public class TestClass {
public void getName(TestClassTwo obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
String name = obj.getTwoName();
// Do something with 'name'
}
public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
TestClass tc=new TestClass();
tc.getName(new TestClassTwo());
}
}
2)将对象投射到 TestClassTwo
的实例,检查类型:
public class TestClass {
public void getName(Object obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
if (obj instanceof TestClassTwo) {
TestClassTwo two = (TestClassTwo) obj;
String name = two.getTwoName();
// Do something with 'name'
} else {
// Handle failure accordingly (throw an exception, log an error, do nothing, etc.)
}
}
public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
TestClass tc=new TestClass();
tc.getName(new TestClassTwo());
}
}
3)如果您想允许其他类具有 getTwoName()
功能,请定义一个接口并将该接口的实例作为参数 TestClass#getName
的:强>
public interface HasTwoName {
public String getTwoName();
}
public class TestClassTwo implements HasTwoName {
@Override
public String getTwoName() {
return "2nd";
}
}
public class TestClass {
public void getName(HasTwoName obj) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
String name = two.getTwoName();
// Do something with 'name'
}
public static void main(String args[]) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
TestClass tc=new TestClass();
tc.getName(new TestClassTwo());
}
}