Java任务:经营范围拓展
来自CloudWiki
目录
任务描述:经营范围拓展
原来面馆的业务一直是面品堂食销售,现在要扩大经营范围,商品不仅仅是面条,还有其他商品,比如黄焖鸡米饭等米饭食品。所有商品都有一些共同的特性,如名称、价格、数量等。本次任务是编写商品类,然后继承商品类编写米饭类,实现商品类代码的重用。
任务实现
定义公共父类--商品类
注:此题有两种解法:一是可以将原先的商品类(如面条类)作为父类,然后衍生出两个子类,如 男装、女装,二是可以重新定义一个父类商品类Goods ,原先的面条类和新增的米饭类作为它的子类。这两种方法都可以,根据你网站自身的经营范围。
可以把一些通用的变量和方法放到父类中,实现代码的重复使用。
注意,父类的成员变量要想被子类访问,前面的修饰符需由private变为protected.
package entity; public class Goods { protected String name;//名称 protected float price;//价格 protected int num;//数量 public Goods() { } public Goods(String n,float p,int num) { this.name = n; this.price = p; this.num = num; } public float getPrice( ){//价格的读方法 return this.price; } public void setPrice(float p) {//价格的写方法 if(p<=0) { System.out.println("价格必须为正!"); }else { this.price =p; } } public int getNum() {//num的读方法 return this.num; } public void setNum(int num) { if(num<0) { System.out.println("数量不能为负!"); }else { this.num=num; } } public static void main(String[] args) { // TODO Auto-generated method stub } }
定义新的子类
类名后面声明extends关键字
由于很多变量和方法,可以直接继承自父类,因此子类代码大幅度减少。
package entity; public class Rice extends Goods{ //父类的成员变量,子类都可以使 //isBig是子类独有的变量 private boolean isBig;//是大份还是小份 //父类的成员方法,子类都可以使 //showWeight是子类独有的方法 public void showWeight() { if(isBig==true) { System.out.println("该份是小份米饭"); } } }
编写子类构造方法
编写子类构造方法,
在构造方法中,可以用super关键字,直接调用父类的构造方法
public Rice(){ super("黄焖鸡米饭",15,1);//调用父类构造方法Goods(String n,float p,int num) this.isBig=false; } public Rice(String n,float p,int num,boolean isBig) { super(n,p,num);//调用父类构造方法Goods(String n,float p,int num) this.isBig=isBig; }
创建子类对象,进行验证
由于引入了继承,因此子类对象既可以调用本类的变量和方法,也可以直接调用父类的成员变量和方法,
达到了代码复用的效果。
public static void main(String[] args) { // TODO Auto-generated method stub Rice r2= new Rice("黄焖鸡米饭",20.0f,3,true); System.out.print("餐品的名称为:"); System.out.println(r2.name);//调用父类成员变量 System.out.print("餐品的数量为:"); System.out.println(r2.getNum());//调用父类成员方法 System.out.print("餐品是否为大份:"); System.out.println(r2.isBig);//调用本类成员方法 r2.showWeight();//调用本类成员方法 System.out.println(r2.toString());//调用toString方法 }
完整代码
父类:Goods
package entity; public class Goods { protected String name;//名称 protected float price;//价格 protected int num;//数量 public Goods() { } public Goods(String n,float p,int num) { this.name = n; this.price = p; this.num = num; } public float getPrice( ){//价格的读方法 return this.price; } public void setPrice(float p) {//价格的写方法 if(p<=0) { System.out.println("价格必须为正!"); }else { this.price =p; } } public int getNum() {//num的读方法 return this.num; } public void setNum(int num) { if(num<0) { System.out.println("数量不能为负!"); }else { this.num=num; } } public static void main(String[] args) { // TODO Auto-generated method stub } }
子类:Rice
package entity; public class Rice extends Goods{ private boolean isBig;//是大份还是小份 public void showWeight() { if(isBig==true) { System.out.println("该份是小份米饭"); } } public Rice(){ super("黄焖鸡米饭",15,1); this.isBig=false; } public Rice(String n,float p,int num,boolean isBig) { super(n,p,num); this.isBig=isBig; } public String toString() { String s=""; s= "名称:"+this.name+"; 价格:"+this.price +"; 数量:"+this.num+";大/小份:"+this.isBig; return s; } public static void main(String[] args) { // TODO Auto-generated method stub Rice r2= new Rice("黄焖鸡米饭",20.0f,3,true); System.out.print("餐品的名称为:"); System.out.println(r2.name);//调用父类成员变量 System.out.print("餐品的数量为:"); System.out.println(r2.getNum());//调用父类成员方法 System.out.print("餐品是否为大份:"); System.out.println(r2.isBig);//调用本类成员方法 r2.showWeight();//调用本类成员方法 System.out.println(r2.toString());//调用toString方法 } }
子类:Noodles
package entity; public class Noodles extends Goods{ String flavor; //空构造方法 public Noodles(){ } public Noodles(String n,float p,int num) { super(n,p,num);//调用父类的构造方法 this.flavor ="不辣"; } public Noodles(String n,float p,int num,String f) { super(n,p,num);//调用父类的构造方法 this.flavor= f; } public String getFlavor() { return this.flavor; } public void setFlavor(String f) { this.flavor =f; } public String toString() {//重写父类的方法 String str ="名称:"+this.name+ " 价格:"+this.price+ " 数量:"+ this.num + " 口味:"+this.flavor; return str; } public static void main(String[] args) { System.out.println("第一份商品:"); Noodles n1= new Noodles();//声明一个Noodle类的对象n1 n1.setName("炸酱面"); //调用父类方法 n1.setPrice(10);//调用父类方法 n1.setNum(2);//调用父类方法 n1.setFlavor("不辣");//调用本类方法 System.out.println(n1.toString());//调用重写了的父类方法 System.out.println(); System.out.println("第二份商品:"); Noodles n2= new Noodles("刀削面",15.0f,3,"微辣"); System.out.println(n2.toString());////调用重写了的父类方法 } }