我想问一下..有时一个表达式..返回的是一个抽象类..这个应该是这个类的子类吧..可是他里面的抽象方法并没有去实现..他的子类都可以直接用...抽象方法里面应该什么实现也没有.但为什么还能用呢??

解决方案 »

  1.   

    简单例子:
    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();
    }
      

  2.   

    把楼上 的 加上注释
    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();
    }
      

  3.   

    哦..我明白了..其实是已经是实现了..我是在看API的时候看见了有很多抽象方法都可以直接拿来直接使用..这也也许是JAVA API中自己就实现了..对吗??
      

  4.   

    抽象类和接口主要用处设计、软件工程方面,接口里的方法全部没有实现,抽象类里的抽象方法没有实现,当一个普通类extends抽象类 implements接口,那么这个普通类就得要重写接口和抽象类的抽象方法,多用于 : 抽象类引用/接口引用(装的子对象).抽象方法,那么执行的就是普通类的重写方法。这也就像1楼说的实现多态。
    比如:Employee类里有salary,   Workers的salary和Manager是不一样的,
    等你工作了,你的项目经理就只写个抽象类Employee,里面有个抽象方法public double allSalary(参数列表);
    你就的写Workers类的public double allSalary(参数列表){.......return ****}
    写Manager类的public double allSalary(参数列表){.......return ****}哈哈,我瞎理解瞎说的。