是这样的,比如我有一个基类(Animal),和两个子类(Dog和Cat),它们都有一个public void eat(){}方法,有一个测试类,class Test{
public static void main(String[]args){
Animal a1 = new Dog();
Animal a2 = new Cat();
//下面我用a1和a2 调用eat()方法,都可以得到相应的猫或狗的操作
// 但是问题是:我在声明a1或a2时还不知道是要用Dog或是Cat的实例呢怎么办?
// 我怎么能够根据传的参数进行动态的执行
// Animal a = new Dog();或是new Cat()呢?
}
}谢谢!
public static void main(String[]args){
Animal a1 = new Dog();
Animal a2 = new Cat();
//下面我用a1和a2 调用eat()方法,都可以得到相应的猫或狗的操作
// 但是问题是:我在声明a1或a2时还不知道是要用Dog或是Cat的实例呢怎么办?
// 我怎么能够根据传的参数进行动态的执行
// Animal a = new Dog();或是new Cat()呢?
}
}谢谢!
楼主【painforever】截止到2008-07-30 19:07:18的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:30 每贴平均分数:7
回帖的总数量:6 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:4 结贴的总分数:30
无满意结贴数:2 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:50.00 % 无满意结分率:66.67 %
敬礼!
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=painforever
Animal obj = Factory.getAnimalInstance("Dog");
obj.eat();
obj = Factory.getAnimalInstance("Cat");
obj.eat();
}
}abstract class Animal { abstract public void eat();
}class Dog extends Animal { public void eat() {
System.out.println("Dog eat");
}
}class Cat extends Animal { public void eat() {
System.out.println("Cat eat");
}
}class Factory { public static Animal getAnimalInstance(String type) {
try {
return (Animal) Class.forName(type).newInstance();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
public void eat(){
System.out.println ("I'm a animal!I want to eat something.");
}
}class Cat extends Animal{
public void eat(){
System.out.println ("I'm a cat!I want to eat something.");
}
}class Dog extends Animal{
public void eat(){
System.out.println ("I'm a dog!I want to eat something.");
}
}public class DogAndCat {
public static void main (String args[]){
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.eat();
a2.eat();
}
}
I'm a cat!I want to eat something.
I'm a dog!I want to eat something.
java.lang.ClassCastException: Dog
at Factory.getAnimalInstance(Main1.java:34)
at Main1.main(Main1.java:4)
Exception in thread "main" java.lang.NullPointerException
at Main1.main(Main1.java:5)
Class.forName(type)这个方法是不是返回一个type类 然后再用Class.forName(type).newInstance()实例化一个对象啊?
另,谢谢你一直回帖,帮我解惑啊~