老师你好,关于equlas()的空指针报错

来源:2-9 编程练习

Agony498

2021-08-05 14:07:48

你好老师,我在重写equals()的时候一直出现空指针异常。

我已经if判断了fru是否为空了,也传入了参数,为什么还是会出现这个异常啊

ps: 重载的equals()方法中的if判断条件只写了一半是因为想测试一下是前半段条件出现的问题还是后半段条件出现的问题。结果是都是报错。空指针

相关截图:

http://img.mukewang.com/climg/610b7f5f091a5c3610221094.jpg

http://img.mukewang.com/climg/610b7f76093fa87a19020568.jpg

写回答

2回答

好帮手慕小脸

2021-08-06

同学你好,

1、使用null调用方法或参数时就会出现空指针异常,贴出代码中有参构造并未完整导致出现异常,修改如下:

http://img.mukewang.com/climg/610c974b09b944d005440210.jpg

2、要求Waxberry类不允许有子类,所以需要在该类上添加final

http://img.mukewang.com/climg/610c978109c20dbe05000070.jpg

祝学习愉快~

1
hgony498
hp>谢谢老师,我把那里忘了。。。。



h021-08-06
共1条回复

好帮手慕小小

2021-08-05

同学你好,根据已上传的截图无法准确定位代码的问题,建议将代码以复制粘贴的方式上传至问答区,便于老师测试并准确定位同学的问题进而给予解答。

祝学习愉快~

0
hgony498
hp>Test.java

public class Test {

    public static void main(String[] args) {

// 实例化2个父类对象,传入两组相同的参数值

Fruits fru1 = new Fruits("圆形", "甜");

Fruits fru2 = new Fruits("圆形", "甜");

// 调用父类eat方法

fru1.eat();

// 测试重写equals方法,判断两个对象是否相等

boolean flag = fru1.equals(fru2);

   System.out.println(flag);

   System.out.println("————————————————————————————————————————");

// 实例化子类对象,并传入相关参数值

// 调用子类face方法和eat方法

// 测试重写toString方法,输出子类对象的信息

System.out.println("——————————————————————————————————————————————");

// 实例化Banana类对象,并传入相关参数值

// 调用子类的advantage和它的重载方法

}

}


Fruits.java

public class Fruits {

    // 私有属性:水果的形状(shape)和口感(taste)

private String shape;

private String taste;

public Fruits() {

}

// 带参构造函数(参数为shape和taste)

public Fruits(String shape, String taste){

   

}

    //通过封装实现对私有属性的get/set访问

    public void setShape(String shape){

       this.shape = shape;

    }

public String getShape(){

   return shape;

}

public void setTaste(String taste){

   this.taste = taste;

}

public String getTaste(){

   return taste;

}

// 创建无参无返回值得方法eat(描述内容为:水果可供人们食用!)

public void eat(){

   System.out.println("水果可供人们食用!");

}

// 重写equals方法,比较两个对象是否相等(比较shape,taste)

public boolean equals(Object obj){

   if(obj == null){

       return false;

   }

   Fruits fru = (Fruits)obj;

   if(this.getShape().equals(fru.getShape()) && this.getTaste().equals(fru.getTaste())){

       return true;

   }else{

       return false;

   }

   

}

public boolean equals(Fruits fruits){

   if(fruits == null){

       return false;

   }

   

   

   if( this.getShape().equals(fruits.getShape()) && this.getTaste().equals(fruits.getTaste()) ){

       return true;

   }else{

       return false;

   }

}

}


Waxberry.java

//要求Waxberry类不允许有子类

public class Waxberry extends Fruits{

    // 私有属性:颜色(color)

    private String color;

//创建构造方法,完成调用父类的构造方法,完成属性赋值

//无参构造

    public Waxberry(){

    }

    

    //有参构造

    public Waxberry(String shape, String taste, String color){

        super(shape, taste);

        this.setColor(color);

    }

    

    //color的get和set

    public void setColor(String color){

        this.color = color;

    }

    

    public String getColor(){

        return color;

    }

    //创建不允许重写的face方法,描述为:杨梅:**、**,果味酸甜适中

    public final void face(){

        System.out.println("杨梅 :" + super.getShape() + ", " + this.getColor() + ",果味酸甜适中");

    }

    

    //重写父类eat方法,描述为:杨梅酸甜适中,非常好吃!

    public void eat(){

        System.out.println("杨梅酸甜适中,非常好吃!");

    }

    

    //重写toString方法,输出的表现形式不同(输出shape,color,taste)

    public String toString(){

        return super.getShape() + "," + this.getColor() +"," + super.getTaste();

    }

}


Banana.java

public class Banana extends Fruits{

    // 私有属性:品种(variety)

    private String variety;

    //创建带参构造方法为所有属性赋值

    //无参构造

    public Banana(){

    }

    

    //有参构造

    public Banana(String shape, String taste, String variety){

        super(shape, taste);

        this.setVariety(variety);

    }

    

    //get 和 set

    public void setVariety(String variety){

        this.variety = variety;

    }

    

    public String getVariety(){

        return variety;

    }

    //创建无参无返回值的advantage方法,描述为:**果形**,果肉香甜,可供生食。

    public void advantage(){

        System.out.println(this.getVariety() + "果形" + super.getShape() + ",果肉香甜,可供生食。 ");

    }

    

    //创建重载advantage方法(带参数color),描述为:**颜色为**

    public void advatage(String color){

        System.out.println(this.getVariety() + "颜色为" + color);

    }

}


h021-08-05
共1条回复

0 学习 · 16556 问题

查看课程