日期:2014-05-20 浏览次数:20746 次
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位的解释吧。这个一定要搞清楚。
你使用的是一个引用,具体实现功能的,你可以根本不用管它。你只要能用就行了。