| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 384 人关注过本帖
标题:求助,求大神指出错误啊!
只看楼主 加入收藏
long8863
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-5
收藏
 问题点数:0 回复次数:2 
求助,求大神指出错误啊!
package 实验;

abstract class Bred {
    String name;

    public void speakName() {
        System.out.println("这是一只 " + this.name);
    }

    public void math() {
    };

    public String toString() {
        return name;
    }
}

class FengHuang extends Bred {
    final String name = "凤凰";

    public void math() {
        System.out.println("他会做算术");
    }
}

class Psittaciformes extends Bred {
    final String name = "鹦鹉";

    public void math() {
        System.out.println("他会做算术");
    }
}

class MaQue extends Bred {
    final String name = "麻雀";

    public void math() {
        System.out.println("他不会做算术");
    }
}

class Work {

    public static Bred getAdd(String name) throws Exception {
        Bred aa = null;
        try {
            if ("凤凰".equals(name)) {
                aa = new FengHuang();
            }
            if ("鹦鹉".equals(name)) {
                aa = new Psittaciformes();
            }
            if ("麻雀".equals(name)) {
                aa = new MaQue();
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return aa;
    }
}

public class WorkGround {
    public static void main(String[] args) {
        // Bred a=null;
        try {
            Work w = new Work();
            w.getAdd("凤凰").speakName();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
结果是 这是一只 null
我希望是  这是一只凤凰


[ 本帖最后由 long8863 于 2013-3-5 19:30 编辑 ]
搜索更多相关主题的帖子: public package abstract 凤凰 void 
2013-03-05 19:27
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:0 
程序代码:
abstract class Bred {
    String name;

    public void speakName() {
        System.out.println("这是一只 " + this.name);
    }

    public void math() {
    };

    public String toString() {
        return name;
    }
}

class FengHuang extends Bred {
   

    public FengHuang(){
        name="凤凰";
    }

    public void math() {
        System.out.println("他会做算术");
    }
}

class Psittaciformes extends Bred {
    public Psittaciformes(){
        name="鹦鹉凰";
    }

    public void math() {
        System.out.println("他会做算术");
    }
}

class MaQue extends Bred {
    public MaQue(){
        name="麻雀";
    }
    public void math() {
        System.out.println("他不会做算术");
    }
}

class Work {

    public static Bred getAdd(String name) throws Exception {
        Bred aa = null;
        try {
            if ("凤凰".equals(name)) {
                aa = new FengHuang();
            }
            if ("鹦鹉".equals(name)) {
                aa = new Psittaciformes();
            }
            if ("麻雀".equals(name)) {
                aa = new MaQue();
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return aa;
    }
}

public class WorkGround {
    public static void main(String[] args) {
        // Bred a=null;
        try {
            Work w = new Work();
            w.getAdd("凤凰").speakName();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

speakName方法是子类继承父类的,方法中this.name是指父类中的name
但是你在每个子类中又重新定义了name属性,复制时是对子类中的name赋值,所以父类中的name是null
我把你每个子类中的name定义都删掉了,子类会继承父类的name属性,直接在构造函数中赋值初始化即可


[ 本帖最后由 shellingford 于 2013-3-5 23:05 编辑 ]
2013-03-05 23:02
lovefan
Rank: 2
等 级:论坛游民
帖 子:31
专家分:53
注 册:2013-3-16
收藏
得分:0 
下面代码能实现你的功能,你的结果之所以是这是一只null是因为你的程序是实现继承,从基类开始调用的,以下代码能实现你要的……
package 实验;
abstract class Bred {
    String name;

    public void speakName() {
        System.out.println("这是一只 " + name);
    }

    public void math() {
    };

    public String toString() {
        return name;
    }
}

class FengHuang extends Bred {
    final String name = "凤凰";
    public void speakName() {
        System.out.println("这是一只 " + name);
    }
    public void math() {
        System.out.println("他会做算术");
    }
}

class Psittaciformes extends Bred {
    final String name = "鹦鹉";
    public void speakName() {
        System.out.println("这是一只 " + name);
    }
    public void math() {
        System.out.println("他会做算术");
    }
}

class MaQue extends Bred {
    final String name = "麻雀";
    public void speakName() {
        System.out.println("这是一只 " + name);
    }
    public void math() {
        System.out.println("他不会做算术");
    }
}

class Work {

    public static Bred getAdd(String name) throws Exception {
        Bred aa = null;
        try {
            if ("凤凰".equals(name)) {
                aa = new FengHuang();
            }
            if ("鹦鹉".equals(name)) {
                aa = new Psittaciformes();
            }
            if ("麻雀".equals(name)) {
                aa = new MaQue();
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return aa;
    }
}

public class Test {
    public static void main(String[] args) {
        try {
            Work w = new Work();
            w.getAdd("凤凰").speakName();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
2013-03-20 20:05
快速回复:求助,求大神指出错误啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017837 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved