请问老师我的代码为什么一直报空指针异常

来源:2-9 编程练习

weixin_慕仔0489737

2020-06-29 11:58:33

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("fru1和fru2的引用比较:"+flag);

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

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

Waxberry w=new Waxberry();

w.setColor("紫红色");

w.setShape("圆形");

w.setTaste("酸甜适中");

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

System.out.println(w.face());

w.eat();

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

System.out.println(w.toString());

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

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

Banana b=new Banana();

b.setShape("圆形");

b.setTaste("果肉香甜");

b.setVariety("仙人蕉");

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

b.advantage();

b.advantage("黄色");

}


}

public class Fruits {
	// 私有属性:水果的形状(shape)和口感(taste)
	private String shape;
	private String taste;
	public Fruits() {
		
	}
	// 带参构造函数(参数为shape和taste)
	public Fruits(String shape,String taste) {
		this.setShape(shape);
		this.setTaste(taste);
	}
	// 通过封装实现对私有属性的get/set访问
	public String getShape() {
		return shape;
	}
	public void setShape(String shape) {
		this.shape = shape;
	}
	public String getTaste() {
		return taste;
	}
	public void setTaste(String taste) {
		this.taste = taste;
	}
	
	// 创建无参无返回值得方法eat(描述内容为:水果可供人们食用!)
	public void eat() {
		System.out.println("水果可供人们食用!");
	}
	// 重写equals方法,比较两个对象是否相等(比较shape,taste)
	public boolean equals(Fruits fs) {
		if(fs==null)
			return false;
		if(this.getShape().equals(fs.getShape())&&this.getTaste().contentEquals(fs.getTaste()))
			return true;
		else
			return false;
	}
}

public final class Waxberry extends Fruits {

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

private String color;

public Waxberry(){

}

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

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

this.setShape(shape);

this.setTaste(taste);

this.setColor(color);

}


public String getColor() {

return color;

}


public void setColor(String color) {

this.color = color;

}


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

public final String face() {

String str = "杨梅:" + this.getColor() + "、" + this.getShape() + ",果味" + this.getTaste() + "非常好吃。";

return str;

}


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

public void eat() {

System.out.println("杨梅" + this.getTaste() + "非常好吃。");

}


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

public String toString() {

return "杨梅的信息:果实为" + this.getShape() + "、" + this.getColor() + "," + this.getTaste() + ",非常好吃。";

}

}

public class Banana extends Fruits{

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

private String variety;

public Banana(){

}

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

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

this.setVariety(variety);

this.setShape(shape);

this.setTaste(taste);

}

public String getVariety() {

return variety;

}

public void setVariety(String variety) {

this.variety=variety;

}

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

public void advantage() {

System.out.println(this.variety+"果形"+this.getShape()+this.getTaste()+",可供生食。");

}

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

public void advantage(String color) {

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

}

}


写回答

2回答

好帮手慕小脸

2020-06-29

同学你好,“慕丝1539783”同学回答是正确的,同学可以参考哦~

祝学习愉快~

0

慕丝1539783

2020-06-29

fru1,fru2实例化的时候,均未传入属性参数。

boolean flag=fru1.equals(fru2);

该方法调用了equals方法中的

if (this.getShape().equals(fs.getShape()) && this.getTaste().contentEquals(fs.getTaste()))

因为实例化时候没有传参,shape属性默认值为null,

this.getShape()的返回值也为null。

null调用equals方法就会产生空指针异常

所以原因是fru1,fru2属性没有赋值。

0

0 学习 · 16556 问题

查看课程