我写了一个关于继承和抽象的小程序,预想结果是   blackcoat.java中的 name变量能在manager.java中被调用,结果运行结果如下:
大家好!我是盖茨,今年50岁
具有28年的管理经验
对null进行年度工作考核
考核评价:工作认真,继续努力!
考核得分:90
==============================
大家好!我是李阳,今年22岁
工号是201020910205,我具有999的人气指数
我接受了一个任务:设计并完成“我爱购物狂”购物网站,一定保质保量完成!
显示null的地方就是blackcoat.java中的 name应该在的位置
代码:
blackcoat.java文件中的代码:
public class blackcoat extends person{
private int hp;
public blackcoat(){

}

public  blackcoat( int age,String name,String sex,String workid,int hp){
super(age,name,sex,workid);
this.hp=hp;
}
public void work(){
System.out.println("工号是"+this.getWorkid()+",我具有"+this.hp+"的人气指数"+
                        "\n我接受了一个任务:设计并完成“我爱购物狂”购物网站,一定保质保量完成!");
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
}
manager.java文件中的代码:
public class manager extends person{
private int zili;
private int core;
public manager(){

}
public manager(int age,String name,String sex,String workid,int zili,int core){
super(age,name,sex,workid);
this.zili=zili;
this.core=core;

}

public void kaohe(){
blackcoat bt =new blackcoat();
System.out.println("具有"+this.zili+"年的管理经验"+"\n对"+bt.getName()+"进行年度工作考核"
           +"\n考核评价:工作认真,继续努力!"+"\n考核得分:"+this.core);
}
public int getZili() {
return zili;
}
public void setZili(int zili) {
this.zili = zili;
}
public int getCore() {
return core;
}
public void setCore(int core) {
this.core = core;
}}
person.java文件中的代码
public abstract class person {
public int age;
public String name;
public String sex;
public String workid;
public person(){

}
public person( int age,String name,String sex,String workid){
this.age=age;
this.name=name;
this.sex=sex;
this.workid=workid;

}
public void hello(){
System.out.println("大家好!我是"+this.getName()+",今年"+this.getAge()+"岁");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getWorkid() {
return workid;
}
public void setWorkid(String workid) {
this.workid = workid;
}}
test.java文件中的代码
public class test {
   public static void main(String[]args){
   manager mr= new manager(50,"盖茨","男","001",28,90);
   mr.hello();
   mr.kaohe();
   System.out.println("==============================");
   blackcoat bt=new blackcoat(22,"李阳","男","201020910205",999);
   bt.hello();
   bt.work();
   }
}

解决方案 »

  1.   

    你用了个blackcoat bt =new blackcoat();
    bt.getName()不是就个空的吗?
      

  2.   

    不是在 test文件中已经给它赋值了吗
      

  3.   

    哦   知道改成 blackcoat bt =new blackcoat(22,"李阳","男","201020910205",999);  就好了 但这样 感觉代码有点冗余了   有没有更好的办法呢?
      

  4.   


    public class test {
     public static void main(String[]args){
     /**
      * 我改动了你的这个方法,
      * 把bt提前声明好,然后作为一个参数,
      */
     manager mr= new manager(50,"盖茨","男","001",28,90);
     blackcoat bt=new blackcoat(22,"李阳","男","201020910205",999);
     mr.hello();
     mr.kaohe(bt);//对kaohe这个方法增加一个参数,参数为被考核的人
     //mr.kaohe(bt.name);也可以只传一个名字,修改namager的kaohe那里即可。
     System.out.println("==============================");
     bt.hello();
     bt.work();
       }
    }对manager中的kaohe方法修改如下:public void kaohe(blackcoat bt){//增加一个参数即可,其余不改
    System.out.println("具有"+this.zili+"年的管理经验"+"\n对"+bt.getName()+"进行年度工作考核"
    +"\n考核评价:工作认真,继续努力!"+"\n考核得分:"+this.core);
    }
    试试吧,可能会有更好的方法,我也是初学。
      

  5.   

    public abstract class person {
    public int age;
    public String name;
    public String sex;
    public String workid;
    public person(){}
    全部应该是protect或者private。
    有点跑题,但是感觉是很重要的。