我声明了一个类似以下的接口
public interface One {
void setNo(int no);
}
然后我有一个类来实现接口
public class Two implements One{
private int no;
@Override
public void setNo(int no){
this.no = no;
}
}
我将有很多类来实现接口,然后我想根据用户输入创建相应的Object。
让我们说我们将三,四,五类描述为两类。
用户选择创建类Three。所以我尝试做类似下面的事情
One base;
Class c = Class.forName("Three");
base = (One) c.newInstance();
base.setNo(5);
对base.setNo()的调用失败。我这样做了吗?
错误
java.lang.ClassNotFoundException: Three
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at com.company.Main.main(Main.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
答案 0 :(得分:2)
包含包名称 所以,如果你的课程三包com.test那么你应该这样写
Class c = Class.forName("com.test.Three");
base = (One) c.newInstance();
base.setNo(5);
答案 1 :(得分:1)
它应该给出编译错误:
无法从One
降低继承方法的可见性尝试将方法设为公开。
public class Two implements One{
private int no;
@Override
public void setNo(int no){
this.no = no;
}
}
我不知道你在哪里创建三节课,但我可以帮助你的两节课。
public class Two implements One {
private int no;
@Override
public void setNo(int no){
this.no = no;
System.out.println("No-->");
}
public static void main(String[] args) {
One base;
Class c;
try {
c = Class.forName("com.test.stackoverflow.Two");
base = (One) c.newInstance();
base.setNo(5);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}