日期:2014-05-20 浏览次数:20881 次
public class Test {
public static void main(String[] args) {
Base obj1 = getBase();
obj1.print();
Base obj2 = getBase("test");
obj2.print();
}
public static Base getBase() {
return new Base() {
@Override
public void print() {
System.out.println("concrete implementation");
}
};
}
//another implementation
public static Base getBase(String str) {
class Sub extends Base {
@Override
public void print() {
System.out.println("Another Implementation");
}
}
return new Sub();
}
}
abstract class Base {
public abstract void print();
}
------解决方案--------------------
把楼上 的 加上注释
public class ReturnAbstract {
//这方法返回一个抽象类的对象,这时要写一个子类 从抽象类继承; 最后是返回这个子类的对象
public static Base getBase(String str) {
class Sub extends Base {
@Override
public void print() {
System.out.println("Another Implementation");
}
}
return new Sub();
}
//返回抽象类自己一个对象,这时要把原来没有实现 的方法实现
public static Base getBase() {
return new Base() {
@Override
public void print() {
System.out.println("concrete implementation");
}
};
}
public static void main(String[] args) {
Base obj1 = ReturnAbstract.getBase();
obj1.print();
Base obj2 = ReturnAbstract.getBase("test");//调用的时候 是多态,人家要求返回的是父类的对象,而你实际上是子类的对象 子类的对象实际上也是父类的对象
obj2.print();//调用子类的方法
}
}
abstract class Base {
public abstract void print();
}
------解决方案--------------------
呵呵,至少他还是个类,如果是接口呢?里面啥也没有,为啥还都能调用啊?
看看楼上2位的解释吧。这个一定要搞清楚。
你使用的是一个引用,具体实现功能的,你可以根本不用管它。你只要能用就行了。