在java中,父类更普遍,子类更具体?我理解不了...
public  class Father
{
  void fatherMethod()
  {
  }
}class son extends Father
{
  void sonMethod1()
   { 
   }
  void sonMethod2()
   {
    }
   .....

这里son类不是有更多的成员函数吗?son类的实例应该是包含father 的方法的吧?怎么说father更普遍呢?不懂....

解决方案 »

  1.   

    参考《java编程思想》……里面讲的很明白!
      

  2.   

    具体也还要具体到子类对象具有的方法不一定父类就一定具有了。比如上个列子,如果这个子类是鸟的话,鸟有可以fly();但是你却不能给父类也定义个fly();因为这是鸟特有的。这就是子类更具体。
      

  3.   

    这个例子 不太贴切
    因为father 本身就是一个子类
    一般例子中的 父类或者称为基类 都是比较抽象的类 例如 人 狗 等  基类一般是对同种类型事物的抽象
    而子类是比较具体的 例如 男人 狼狗等  是基类的一种具体实现
    楼主 看看JAVA编程思想的  抽象 继承 多态的概念 就明白了
      

  4.   

    我现在迷惑的地方也许就在这里.
    一个父类的实例,可以用子类来定义 
    father f= new son();
    这里我比较困惑.这么做是合法的,但是我比较困惑的是,f就拥有了son的所有方法?
    这是为什么呢?
      

  5.   

    你不要老是在“父”和“子”这两个名称上面纠结。如果你觉得这样不好理解,有另外一种说法:超类和子类。Father f = new Son();这样做是合法的,因为子类必然是父类的一个类型。用“父”和“子”这个名称可能不好理解,换成“超类”和“子类”就好理解了,比如:
    class 人
    class 男人 extends  人
    class 女人 extends 人根据常识应该可以知道,一个“男人”肯定是一个“人”,因此把子类对象赋值给父类类型的变量是合理的:
    人 obj1 = new 男人();
    人 obj2 = new 女人();father f = new son();
    “但是我比较困惑的是,f就拥有了son的所有方法?”f 虽然是父类的变量,但它实际上它引用的是子类的一个对象,或者说内存中实际存在的是一个子类对象,你只不过是把它当作父类类型的一个对象来看待而已。比如,“刘春华”是一个“人”,他是类型“人”的一个对象。而刘春华更加具体的类型是“女人”:
    人 liuchunhua = new 女人();这个对象的类型虽然是“人”,但实际上它的具体类型是“女人”,这一点不会因为我们把它当父类类型来看而发生变化。因此,“刘春华”可以做“女人”才可以做的事,比如生孩子。
      

  6.   


    我试过了,好像即便把子类对象赋值给父类变量,父类变量也无法访问子类对象特有的方法。我的代码是这样的:class A
    {
    public int a=1;

    public void f1(){
    System.out.println("f1,class A");
    }
    }class B extends A
    {
    public int b=2; public void f1(){
    System.out.println("f1,class B");
    }
    public void f2(){
    System.out.println("f2,class B");
    }
    }
    class Hello
    {
    public static void main(String args[]){
    A a1=new A();
    B b1=new B();
    a1=b1;
    a1.f1();
                    //a1.f2(); 这里编译出错,说f2()未定义。

    A a2=new B();
                    //a2.f2(); 同样编译出错。

    }
    }