
如图:
entity 包下有4个类,PUB类,A类,B类和C类
还有3个包,分别是a,b,c包
PUB类是entity 包下对外公开访问的类
a,b,c包下面的类完全一样,每个类里面的方法名也完全相同,只有方法里面的实现方式不一样。
A类调用a包下面的类,B类调用b包下面的类,C类调用c包下面的类
现在在PUB类里面通过参数切换A类,B类和C类,实现调用a,b,c包下面的各个方法。
-------------------------------------------------------------------
求实现方式,如何使用extends和implements 求大神指点一二
------解决思路----------------------
对应你所谓的pub
public class Car {
public static void main(String[] args) {
run("benz2");
run("bmw2");
run("audi2");
}
public static void run(String car) {
if ("benz".equals(car)) {
Benz benz = new BenzImpl();
benz.run();
} else if ("benz2".equals(car)) {
Benz benz = new Benz2Impl();
benz.run();
} else if ("bmw".equals(car)) {
Bmw bmw = new BmwImpl();
bmw.run();
} else if ("bmw2".equals(car)) {
Bmw bmw = new Bmw2Impl();
bmw.run();
} else if ("audi".equals(car)) {
Audi audi = new AudiImpl();
audi.run();
} else if ("audi2".equals(car)) {
Audi audi = new Audi2Impl();
audi.run();
}
}
}
------解决思路----------------------
对应你的A:
public interface Audi {
public void run();
}
对应你的A包下的类
public class AudiImpl implements Audi {
@Override
public void run() {
System.out.println("audi开起来啦!");
}
}
public class Audi2Impl implements Audi {
@Override
public void run() {
System.out.println("audi2开起来啦!");
}
}
------解决思路----------------------
实现包结构如图:

第一个抽象父类..

所有实体类,A,B,C都集成这个类。如A(B,C 都一样):

核心:

测试:

------解决思路----------------------
package entity;
public class PUB {
private String packageCofig = "a";//defalut a 假设此值是从配置文件读取
public EntityInterface start(String entityName) throws Exception{
String classAllName = "entity."+ packageCofig +"." +entityName;
Class cl = Class.forName(classAllName);
Object obj = cl.newInstance();
return (EntityInterface)obj;
}
public static void main(String[] args) throws Exception{
PUB pub = new PUB();
pub.start("X1").doSomething();
pub.start("X2").doSomething();
pub.setPackageCofig("b");//修改配置文件
pub.start("X1").doSomething();
pub.start("X2").doSomething();
/*
a --> X1.doSomething...
a --> X2.doSomething...
b --> X1.doSomething...
b --> X2.doSomething...
*/
}
public String getPackageCofig() {
return packageCofig;
}
public void setPackageCofig(String packageCofig) {
this.packageCofig = packageCofig;
}
}
//觉得A B C三个类没必要写,至少这里是的

------解决思路----------------------
package entity.a;
import entity.EntityInterface;
public class X1 implements EntityInterface{
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("a --> X1.doSomething...");
}
}
这样的话,再要添加的话只要 添加 相应的类就可以了,其他的不用修改