小弟不才,问大家一个基础问题:Son类继承Father类Father obj = new Son();

Son obj = new Son();有什么区别?
Father obj = new Son();有什么好处.还有比如:  (接口)A  a = new AImpl(接口A的实现类) 这样新建更 AImpl a =new AImpl();有什么区别,前者有什么优点?

解决方案 »

  1.   

    好处从你这两句代码里面是看不出来的。要从模块重用、集成的角度来分析其好处。比如有个函数,要求参数是List,那么你就可以根据程序自身需要来使用:ArrayList 或 LinkedList 或其他大把的List,甚至是自定义的List。提供了很好的灵活性。
      

  2.   

    借用别人的说法:
    这个是实现多态要素之一,多态后就可以写出一段所有子类都通用的代码,当添加新的子类时,这段代码是不需要修改的。 
    比如:父类Person,子类Teacher,Student,方法method()
    如果使用第2行,当改用Student的时候,那么第3行也需要改变 
    Person a = new Teacher(); 
    //Teacher a = new Teacher(); 
    a.method();
     
      

  3.   

    问题就在于灵活性  比如说:   一个方法要求一个Cat对象作为参数
    func(Cat cat){
    System.out.println(cat.getName());
    System.out.println(cat.getSex());
    }
    在方法体里会调用获取相关信息,  这时候你的上司说要求你再写一个能打印输出狗的信息的方法
    func(Dog dog){
    System.out.println(dog.getName());
    System.out.println(dog.getSex());
    }
    基本是一样的代码,不过还是要重写一遍
    其实你完全可以让Cat 和 Dog 实现Animal接口
    不用关心传进来的是Cat还是Dog ,只要传进来的对象实现的Animal接口就行
    可能传进来的是一个Bird 它还会有fly()方法  但是这都跟我们业务逻辑没有关系
    我们关注的只是  它有getName()和getSex() 就行
      

  4.   

    简单的给你说一下吧
    Father obj = new Son();
    Son类继承Father类,其实例的对象,可以去使用Father类中的一些属性和方法,但前提是这些属性和方法是非private修饰的,也就是说不是Father私有的属性和方法Son obj = new Son();
    而如果son类不继承Father类,那么他就不能去使用Father的属性和方法,当然如果你去实例化Father类的话,可以使用father类公有的方法。
    其实,这只是最直接的好处,以后你会慢慢学到,慢慢体会吧!