所有的类放在duotai包中,问题在最后一个程序的红色标出。类Module
class Module {
private Dialog dialog;
public Module(Dialog dialog) {
this.dialog = dialog;
}
public void callDialog() {
dialog.show();
}
}
抽象类Dialog
abstract class Dialog {
public Dialog() {
}
abstract public void show();
}
Dialog派生的子类Dialog1class Dialog1 extends Dialog {
public Dialog1() {
}
public void show() {
System.out.println("Dialog1");
}
}
Dialog派生的子类Dialog2class Dialog2 extends Dialog {
public Dialog2() {
}
public void show() {
System.out.println("Dialog2");
}
}
启动类
public class DialogTest {
public static void main(String[] args) throws Exception {
//从文件中读取类名
FileInputStream in = null;
in = new FileInputStream("C:\\a.txt"); //该文本文件中存储的是duotai.Dialog2
byte[] buffer = new byte[1024];
int length = in.read(buffer);
String className = new String(buffer,0,length); //读取类名,存储在字符串中
System.out.println(className);
in.close();
//String className = "duotai.Dialog2";
Class c = Class.forName(className);
Constructor con = c.getConstructor(new Class[]{});
Object obj = con.newInstance(); //反射得到obj想要做为参数传递给Module构造方法,生成一个Module对象
//Dialog2 dialog = new Dialog1();
//Module mol = new Module(dialog);
//想用下面代码实现上面被注释掉的两条代码的功能,但是把obj转换成Dialog2之后才能传给Module构造方法
//怎么才能不在程序中体现Dialog2??
Module mol = new Module((Dialog2)obj);
mol.callDialog();
}
}
class Module {
private Dialog dialog;
public Module(Dialog dialog) {
this.dialog = dialog;
}
public void callDialog() {
dialog.show();
}
}
抽象类Dialog
abstract class Dialog {
public Dialog() {
}
abstract public void show();
}
Dialog派生的子类Dialog1class Dialog1 extends Dialog {
public Dialog1() {
}
public void show() {
System.out.println("Dialog1");
}
}
Dialog派生的子类Dialog2class Dialog2 extends Dialog {
public Dialog2() {
}
public void show() {
System.out.println("Dialog2");
}
}
启动类
public class DialogTest {
public static void main(String[] args) throws Exception {
//从文件中读取类名
FileInputStream in = null;
in = new FileInputStream("C:\\a.txt"); //该文本文件中存储的是duotai.Dialog2
byte[] buffer = new byte[1024];
int length = in.read(buffer);
String className = new String(buffer,0,length); //读取类名,存储在字符串中
System.out.println(className);
in.close();
//String className = "duotai.Dialog2";
Class c = Class.forName(className);
Constructor con = c.getConstructor(new Class[]{});
Object obj = con.newInstance(); //反射得到obj想要做为参数传递给Module构造方法,生成一个Module对象
//Dialog2 dialog = new Dialog1();
//Module mol = new Module(dialog);
//想用下面代码实现上面被注释掉的两条代码的功能,但是把obj转换成Dialog2之后才能传给Module构造方法
//怎么才能不在程序中体现Dialog2??
Module mol = new Module((Dialog2)obj);
mol.callDialog();
}
}
似乎说得有点乱,不知道说清楚了没?
Dialog dia = c.newInstance();
Module mol = new Module(dia);
没有体现Dialog2!