本帖最后由 dabanphoto 于 2010-08-27 13:56:50 编辑

解决方案 »

  1.   

    对,就是这么写的,而且也必须这么写,不明白楼主有啥别扭的当然,我是说的子类构造方法里面的super(a, b);Son s = new Son(f.a,f.b,"音乐");// 这种有啥必要?
    Son s = new Son("木工","修车","音乐");// 还不是一样?
    鉴定完毕
      

  2.   

    你这个是真正的parent-son关系了而OO的类继承大部分并不体现这样语义逻辑 交通工具-飞机、汽车怎么会有父子关系?你的例子是有问题的Father f = new Father("木工","修车");
    Son s = f.createSon("音乐"); //此方法中构造Son对象,并将Father的技能赋予Son对象
      

  3.   

    你这样我觉得不算很好的写法,因为有时候根据需要,可能Father会的东西要改变,比如老爸还会踢球,如果按你这样写了,如果要改动,则son对象也得跟着改,而调用的话就省事了,这么理解没问题吧.
      

  4.   

    你这样我觉得不算很好的写法,因为有时候根据需要,可能Father会的东西要改变,比如老爸还会踢球,如果按你这样写了,如果要改动,则son对象也得跟着改,而调用的话就省事了,这么理解没问题吧.
      

  5.   

    我也觉得楼主的这个例子怪怪的..这样写就是限定了必须先new Father再new Son了嘛= =
      

  6.   

    我也同意4楼的说法。
    一般而言,用继承来表达"爸爸会“木工”和“修车”,儿子在继承老爸的光荣传统后还会点音乐"的话,
    多数是这样举例的..
    class Father{   
        Father(){
        }
        public void 木工(){
        }
        public void 修车(){
        }
    }class Son extends Father{
        Son(){
        }
        public void 音乐(){
        }
    } 因为"行为"通常用方法来表示
      

  7.   

    木油问题.不过应该用方法举例,才正常一点. 另外,如果不想先new父类,再new子类,
    不是还有多态吗?
    Father son = new Son ("木工","修车","音乐");
      

  8.   


    这样也不错~~~
    public class Test{
    public static void main(String[] args) {

    Son s = new Son("木工", "修车");
    s.setC("音乐");
    System.out.println(s.a + " " + s.b);
            System.out.println(s.a + " " + s.b + " " + s.c);
    }
    }
    class Father{
    String a;
    String b;
    public Father1(String a, String b) {
    this.a = a;
    this.b = b;
    }}class Son extends Father{
    String c;

    public Son(String a, String b) {
    super(a, b);
    }

    public String getC() {
    return c;
    } public void setC(String c) {
    this.c = c;
    }
    }
      

  9.   

    同意二楼的。个人觉得调用super()方法好些
      

  10.   

    如果觉得super()有点别扭,那this楼主感觉如何?
    子类构造前,是必须实现父类的构造方法的,super()就解决了这个问题(如果是无参构造,此步可略)。而且super()方法应该在子类构造方法中的第一句代码,因为,父类没有构造出来之前,子类就不可能构造出来的。
    换个易懂的意思就是,没得父亲,哪来的儿子。
      

  11.   

    我个人觉得,楼主代码写的不错。主要是这几个词组误导我们。在java里,讲究的是以词名意,能够让读者通俗易懂。这里我们不以词来名意。所以说代码不错。举的例子会让读者看成是行为,要写成方法。
      

  12.   

    Son s = new Son(f.a,f.b,"音乐");// 
    的确这里感觉怪怪的~~
      

  13.   


           Father f = new Father("木工","修车");
            Son s = new Son(f.a,f.b,"音乐");不需要这么复杂吧。 直接
            Son s = new Son("木工","修车","音乐");不就可以了吗?
      

  14.   


    Son s = new Son(f.a,f.b,"音乐"); 这句话 有点怪
      

  15.   


    public class TestExtend {
        public static void main(String[] args){
            
            Father f = new Father("木工","修车");
            Son s = new Son(f.a,f.b,"音乐");
            
            System.out.println(f.a + " " + f.b);
            System.out.println(s.a + " " + s.b + " " + s.c);
        }父子类编写无任何问题,在mian方法中,你的调用方式显得不叫不舒服,当别人不知道你的father和son的父子类关系时也就无所谓了。所以只是lz多虑了,你是在知道父子关系后写的调用,调用中父类和子类的出现顺序会影响你这种编码的意义,所以存在一定得依赖性。代码上并不存在问题
      

  16.   


      Father f = new Father("木工","修车");
            Son s = new Son(f.a,f.b,"音乐");
            
            System.out.println(f.a + " " + f.b);
            System.out.println(s.a + " " + s.b + " " + s.c);这段代码从面向对象来说是有问题的,  还真以为F 是 S的父亲吗?
    看这个实例化过程。
    首先 new 一个f ,然后 new  一个 f,但在new f的时候其实已经 隐性再调用了 new Father;
    只是这个 new Father用的值也是("木工","修车"),但本质上却是另一个对象。
    其实前几楼也说过,这么写Son s = new Son("木工","修车","音乐");就行了。
      

  17.   

    刚打错了几个字首先 new 一个f ,然后 new 一个 s,但在new s的时候其实已经 隐性再调用了 new Father;