多态 习题

一、继承的复习

//  父类  Computer

package computer;

public class Computer {
	private String name;//插入设备名称

	public Computer(String name) {
		
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	//  有参构造方法的作用就是初始化成员变量
	public void usb(){
		
	}
}


//  子类  U盘类

package computer;

public class UDisk extends Computer{

	public UDisk(String name) {
		super(name);
		
	}

	@Override
	 public void usb() {
		
		System.out.println(super.getName()+"可以操作电脑了");
	}
	
    		
}


//   子类  键盘类


package computer;

public class UsbKeyboard extends Computer{

	public UsbKeyboard(String name) {
	  super(name);
		
	}

	@Override
	public void usb() {
		// TODO Auto-generated method stub
		super.usb();
		System.out.println(super.getName()+"可以操作电脑了");
	}

}


//  子类  鼠标类

package computer;

public class UsbMouse extends Computer{
	
		private String type;//usb的类型

		public UsbMouse(String name, String type) {
			super(name);
			this.type = type;
		}

		@Override
		public void usb() {
			System.out.println(super.getName()+this.type+"可以操作电脑了");
			
		}

		
}


//  测试类

package computer;

public class TestComputer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		UDisk u=new UDisk("U盘");
		UsbMouse m=new UsbMouse("鼠标","USB2.0");
		UsbKeyboard k=new UsbKeyboard("键盘");
		
		u.usb();
		m.usb();
		k.usb();
	}

}

输出结果:

 

二、木兰替父从军

//  父类 father

package father;

public class Father {
		
		public void fight(){
			System.out.println("我是父亲花胡,我要去打仗");
		}
			
}

//  子类 Daughter

package father;

public class Daughter extends Father{

	@Override
	public void fight() {
		System.out.println("我是花木兰,我要替父从军");
	}

	public void dressup(){
		System.out.println("我是花木兰,我要梳妆打扮");
	}
}


//  测试类

package father;

public class Test {

	public static void main(String[] args) {
			
		//女扮男装,女儿身份变成父亲身份
		//向上转型
		//1.首先,创建子类对象
		//2.子类对象赋值给父类引用
		//3.父类调用父类的方法
		
		Daughter mulan=new Daughter();
		Father huahu=mulan;
		mulan=null;
		huahu.fight();
		
		//得胜归朝
		System.out.println("************");
		
		//向下转型
		//4.父类对象强制转换为子类对象(子类类型)
		//5.子类调用子类方法
		
		mulan=(Daughter) huahu;
		huahu=null;
		mulan.dressup();
	}

}

输出结果:

 

三、

、中国南北差异较大,主要体现在饮食上,南方人喜欢吃米饭,北方人比较喜欢吃馒头,现在定义一个Person类,Person类中提供一个name属性,提供一个eat方法;定义一个SouthPerson类,SouthPerson类继承自Person类,重写父类的eat方法,输出“米饭”;定义一个NorthPerson类,继承自Person类,重写父类的eat方法,输出馒头;定义一个厨师类Cook,厨师类中提供一个做饭的方法cook,方法传递一个Person对象参数,在cook方法中调用Person的eat方法;写一个测试类,定义两个人,分别是南方人和北方人,定义一个厨师,调用厨师的cook方法,烹调出适合南北方人习惯食物。

//父类Person

package person02;

public class Person {
    
	public String name;
	
	public void eat(){
		
	}
}

//  子类  南方人  SouthNorth

package person02;

public class SouthPerson extends Person{

	@Override
	public void eat() {
		System.out.println(super.name+"是南方人,吃米饭");
	}
		
	
}


//  子类  北方人  NorthPerson

package person02;

public class SouthPerson extends Person{

	@Override
	public void eat() {
		System.out.println(super.name+"是南方人,吃米饭");
	}
		
	
}

//  厨师类  Cook

package person02;

public class Cook {
	//进店的是南方人,做米饭,进来的是北方人,做馒头
	public void cook(Person p){
		if(p instanceof SouthPerson){
			SouthPerson sp=(SouthPerson) p;
			sp.eat();
		}else{
			NorthPerson np=(NorthPerson) p;
			np.eat();
		}
	}
}


//   测试类  Test

package person02;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//定义一个南方人
		SouthPerson zhangsan=new SouthPerson();
		zhangsan.name="张南方";
		
		// 定义一个北方人
		NorthPerson lisi=new NorthPerson();
		lisi.name="李北方";
		
		//定义一个厨师
		Cook xindongfang=new Cook();
		
		// 调用厨师的cook方法。
		xindongfang.cook(zhangsan);
		xindongfang.cook(lisi);
				
	}

}

输出结果:、

四、

定义一个书店类BookStore,书店类中提供一个书店名称的属性name,提供一个书的类别的方法bookType;定义一个新华书店类XHBookStore继承自BookStore类,重写父类的bookType方法,输出“售卖中小学生读物”;定义一个东宇书社类DYBookStore继承自BookStore类,重写父类的bookType方法,输出“售卖中学生杂志读物”;定义一个学生类Student,提供一个买书的方法buy,将BookStore作为方法的参数,在buy方法中调用BookStore的bookType方法;写一个测试类,创建东宇书社和新华书店,创建2个学生对象,分别是小学生和中学生,调用学生的buy方法,购买适合该学生阅读的图书 

// 父类  书店类
 
package bookstore;

public class BookStore {
	public String name;
	
	public void bookType(){
		
	}
}

// 子类  新华书店类

package bookstore;

public class XHBookStore extends BookStore{

	@Override
	public void bookType() {
		System.out.println(super.name+"售卖中小学生读物");
	}
	 
	
}

// 子类  东宇书社类

package bookstore;

public class DYBookStore extends BookStore{

	@Override
	public void bookType() {
		System.out.println(super.name+"售卖中学生杂志读物");
	}
		  
	
}

// 子类   学生类

package bookstore;

public class Student {

	public void buy(BookStore bs){
		if(bs instanceof XHBookStore){
			XHBookStore xhsp=(XHBookStore) bs;
			xhsp.bookType();
		}else if(bs instanceof DYBookStore){
			DYBookStore dysp=(DYBookStore) bs;
			dysp.bookType();
		}
	}
}

//  测试类

package bookstore;

public class TestBookStore {

	public static void main(String[] args) {
		XHBookStore xhbs=new XHBookStore();
		xhbs.name="新华书店";
		
		DYBookStore dybs=new DYBookStore();
		dybs.name="东宇书社";
		
		Student s=new Student();
		s.buy(dybs);
		s.buy(xhbs);
				
				

	}

}

输出结果:

五、

定义一个汽水类Drink,汽水类中有一个味道的方法taste;定义一个可口可乐类,Coco继承自汽水类,重写父类的taste方法,输出“我是可口可乐,我是甜汽水”;定义一个盐汽水类SaltDrink继承自汽水类,重写父类的taste方法,输出“我是盐汽水,我是咸的”;定义一个测试类,提供一个售卖汽水的方法sell,接收用户输入的值,如果是“甜的”,就卖给客户甜的汽水,否则卖给客户咸的汽水

//  父类   Drink

package drink;

public class Drink {
	
	public void taste(){
		
	}
}

//  子类  Coco

package drink;

public class Coco extends Drink{

	@Override
	public void taste() {
		System.out.println("我是可口可乐,我是甜汽水");
	}
		
	
}

//  子类  SaltDrink

package drink;

public class SaltDrink extends Drink{

	@Override
	public void taste() {
		System.out.println("我是盐汽水,我是咸的");
	}
	
	
}

//  测试类  Test

package drink;

import java.util.Scanner;

public class Test {
		
	
	
	public static void main(String[] args) {
		
		
		while(true){
			System.out.println("输入你想要的汽水口味:");
			Scanner sc=new Scanner(System.in);
			String kouwei=sc.nextLine();
			Drink drink=sell(kouwei);
			drink.taste();
			
	}
}
	public static Drink sell(String kouwei){
		Drink d=null;
		if("甜的".equals(kouwei)){
			d=new Coco();
		}else if("咸的".equals(kouwei)){
			d=new SaltDrink();
			
		}else{
			d=new Drink();
			System.out.println("口味输入有误!");
			
		}
		return d;
	}
}
	

 输出结果:

 

六、

设计店铺类Store,属性包括店铺名称、店铺地址、员工人数、注册资金;方法包括开店、闭店、购物。

设计店铺类子类:

直营店DirectSale,继承店铺类,属性包含店长姓名、送货工人人数、商品起送金额、特殊商品折扣比率;方法包括送货。

加盟店Franchise,继承店铺类,属性包含加盟商姓名、加盟金额、加盟时间(字符串);方法包括解约。

折扣店Discount,继承店铺类,属性包括最大折扣、最小折扣、是否打折;方法包括打折。N n     

要求:

  1. 所有父子类均完成get和set封装,以及构造方法(无参构造方法和有参构造方法)封装。
  2. 子类继承父类时,重写父类开店、闭店、购物方法,方法体为输出开店闭店时间。
  3. 参观某店,输出这个店铺的全部信息(例如参观直营店,输出店铺信息及店长名称、起送金额等)。
  4. 手动输入(直营店、加盟店、折扣店),判断输入内容,实例化不同子类对象,初始化店铺信息。
  5. 去某店购物,直营店要求输入购买金额判断是否能够配送,判断送货工人人数是否能够配送;加盟店要求输入加盟金额,判断是否可以加盟;折扣店输入购买金额,判断是否开始打折,如果未开始打折,输出对不起,未开始打折活动,如果以开始打折,输出最大折扣和最小折扣。使用instanceof关键字判断
  6. 编写测试类完成相关功能输入和输出
//  父类 店铺类  Store

package store;

public class Store {
	
	private String name;
	private String address;
	private int renshu;
	private int zhucezijin;
	
	
	//无参构造方法
	public Store() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	//有参构造方法
	public Store(String name, String address, int renshu, int zhucezijin) {
		super();
		this.name = name;
		this.address = address;
		this.renshu = renshu;
		this.zhucezijin = zhucezijin;
	}



	public void kaiDian(){
		
	}
	public void biDian(){
		
	}
	public void shop(){
		
	}
    public void show(){
		
	}
	


  //get()和set()方法
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public int getRenshu() {
		return renshu;
	}

	public void setRenshu(int renshu) {
		this.renshu = renshu;
	}

	public int getZhucezijin() {
		return zhucezijin;
	}

	public void setZhucezijin(int zhucezijin) {
		this.zhucezijin = zhucezijin;
	}
	
	
}


//  子类  直营店

package store;

//  直营店

public class DirectSale extends Store{

	private String shopManagerName;
	private double songHuoWorkerNumber;
	private double shangPinQiSongJinE;
	private double shangPinZheKouBiLv;
	
	//无参构造方法
	public DirectSale() {
		super();
		// TODO Auto-generated constructor stub
	}
     //有参构造方法
	public DirectSale(String shopManagerName, double songHuoWorkerNumber, double shangPinQiSongJinE,
			double shangPinZheKouBiLv) {
		super();
		this.shopManagerName = shopManagerName;
		this.songHuoWorkerNumber = songHuoWorkerNumber;
		this.shangPinQiSongJinE = shangPinQiSongJinE;
		this.shangPinZheKouBiLv = shangPinZheKouBiLv;
	}

    //  调用父类构造方法
	public DirectSale(String name, String address, int renshu, int zhucezijin) {
		super(name, address, renshu, zhucezijin);
		
	}
	
    //   方法重写
	@Override
	public void kaiDian() {
		super.kaiDian();
		System.out.println("开店时间是早上8点!");
		
	}
	@Override
	public void biDian() {
		// TODO Auto-generated method stub
		super.biDian();
		System.out.println("关店时间是晚上8点!");
	}
	@Override
	public void shop() {
		// TODO Auto-generated method stub
		super.shop();
	}
	@Override
	public void show() {
		// TODO Auto-generated method stub
		super.show();
		System.out.println("本店是直营店");
		System.out.println("店长名字是"+this.shopManagerName);
		System.out.println("店铺起送金额是"+this.shangPinQiSongJinE);
	}


  //  送货方法
	public void songHuo(){
		
	}
	
	//get()和set()方法
	public String getShopManagerName() {
		return shopManagerName;
	}
	public void setShopManagerName(String shopManagerName) {
		this.shopManagerName = shopManagerName;
	}
	public double getSongHuoWorkerNumber() {
		return songHuoWorkerNumber;
	}
	public void setSongHuoWorkerNumber(double songHuoWorkerNumber) {
		this.songHuoWorkerNumber = songHuoWorkerNumber;
	}
	public double getShangPinQiSongJinE() {
		return shangPinQiSongJinE;
	}
	public void setShangPinQiSongJinE(double shangPinQiSongJinE) {
		this.shangPinQiSongJinE = shangPinQiSongJinE;
	}
	public double getShangPinZheKouBiLv() {
		return shangPinZheKouBiLv;
	}
	public void setShangPinZheKouBiLv(double shangPinZheKouBiLv) {
		this.shangPinZheKouBiLv = shangPinZheKouBiLv;
	}

}


//  子类  加盟店

package store;

//加盟店

public class Franchise extends Store{

	private String jiaMengShangName;
	private	double jiaMengJinE;
	private	String jiaMengTime;
		
	
	//无参构造方法
	public Franchise() {
		super();
		
	}

	//有参构造方法
	public Franchise(String jiaMengShangName, double jiaMengJinE, String jiaMengTime) {
		super();
		this.jiaMengShangName = jiaMengShangName;
		this.jiaMengJinE = jiaMengJinE;
		this.jiaMengTime = jiaMengTime;
	}
	
   //  调用父类构造方法
	public Franchise(String name, String address, int renshu, int zhucezijin) {
		super(name, address, renshu, zhucezijin);
		
	}
	
   //  方法重写
   @Override
	public void kaiDian() {
		// TODO Auto-generated method stub
		super.kaiDian();
		System.out.println("开店时间是早上8点!");
	}

	@Override
	public void biDian() {
		// TODO Auto-generated method stub
		super.biDian();
		System.out.println("关店时间是晚上8点!");
	}

	@Override
	public void shop() {
		// TODO Auto-generated method stub
		super.shop();
	}

	@Override
	public void show() {
		// TODO Auto-generated method stub
		super.show();
		System.out.println("本店是加盟店");
		System.out.println("店长名字是"+this.jiaMengShangName);
		System.out.println("加盟金额是"+this.jiaMengJinE);
		System.out.println("加盟时间是"+this.jiaMengTime);
	}

	//    解约方法
	public void jieYue(){
			
	}
	//get()和set()方法

	public String getJiaMengShangName() {
		return jiaMengShangName;
	}

	public void setJiaMengShangName(String jiaMengShangName) {
		this.jiaMengShangName = jiaMengShangName;
	}

	public double getJiaMengJinE() {
		return jiaMengJinE;
	}

	public void setJiaMengJinE(double jiaMengJinE) {
		this.jiaMengJinE = jiaMengJinE;
	}

	public String getJiaMengTime() {
		return jiaMengTime;
	}

	public void setJiaMengTime(String jiaMengTime) {
		this.jiaMengTime = jiaMengTime;
	}
	
}



//  子类  折扣店

package store;

//折扣店

public class Discount extends Store{
	
	private double zuiDaZheKou;
	private double zuiXiaoZheKou;
	private boolean shiFouDaZhe;
	
	//无参构造方法
	public Discount() {
		super();
		
	}
	
   // 调用父类构造方法
	public Discount(String name, String address, int renshu, int zhucezijin) {
		super(name, address, renshu, zhucezijin);
		// TODO Auto-generated constructor stub
	}
	
	//有参构造方法
	public Discount(double zuiDaZheKou, double zuiXiaoZheKou, boolean shiFouDaZhe) {
		super();
		this.zuiDaZheKou = zuiDaZheKou;
		this.zuiXiaoZheKou = zuiXiaoZheKou;
		this.shiFouDaZhe = shiFouDaZhe;
	}
	
   // 方法重写
	@Override
	public void kaiDian() {
		// TODO Auto-generated method stub
		super.kaiDian();
		System.out.println("开店时间是早上8点!");
	}

	@Override
	public void biDian() {
		// TODO Auto-generated method stub
		super.biDian();
		System.out.println("关店时间是晚上8点!");
	}

	@Override
	public void shop() {
		// TODO Auto-generated method stub
		super.shop();
	}

	@Override
	public void show() {
		// TODO Auto-generated method stub
		super.show();
		System.out.println("本店是折扣店");
		System.out.println("最大折扣是"+this.zuiDaZheKou);
		System.out.println("最小折扣是"+this.zuiXiaoZheKou);
	}
	
	public void daZhe(){
		
		
	}
	//get()和set()方法

	public double getZuiDaZheKou() {
		return zuiDaZheKou;
	}

	public void setZuiDaZheKou(double zuiDaZheKou) {
		this.zuiDaZheKou = zuiDaZheKou;
	}

	public double getZuiXiaoZheKou() {
		return zuiXiaoZheKou;
	}

	public void setZuiXiaoZheKou(double zuiXiaoZheKou) {
		this.zuiXiaoZheKou = zuiXiaoZheKou;
	}

	public boolean isShiFouDaZhe() {
		return shiFouDaZhe;
	}

	public void setShiFouDaZhe(boolean shiFouDaZhe) {
		this.shiFouDaZhe = shiFouDaZhe;
	}
	
	
}


//  测试类

package store;

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
	  boolean panduan=true;
	  while(true){
      System.out.println("请输入你选择的店铺(直营店、加盟店、折扣店):");
      Scanner sc=new Scanner(System.in);
      String dianPuXuanZe=sc.nextLine();
     
      if("直营店".equals(dianPuXuanZe)){
    	  DirectSale ds=new DirectSale("张三",3,1000,0.5);
    	  
    	  ds.kaiDian();
    	  ds.biDian();
    	  ds.show();
    	  
    	 System.out.println("请输入你的购买金额:");
    	 double gouMaiJinE=sc.nextDouble();
    	
    	 
    	 double i=ds.getSongHuoWorkerNumber();
    	 double j=ds.getShangPinQiSongJinE();
    	 
    	 if(gouMaiJinE>j){
    		 System.out.println("达到商品起送金额");
    		 if(i>0){
    			 System.out.println("可以送货!");
    			 i--;
    		 }else{
    			 System.out.println("送货工人不够,不能送货");
    		 }
    	 }else{
    		 System.out.println("未达到商品起送金额,不可以送货");
    	 }
    	  
      }else if("加盟店".equals(dianPuXuanZe)){
    	  Franchise f=new Franchise("李四",10000,"2021.08.12");
    	  f.kaiDian();
    	  f.biDian();
    	  f.show();
    	  
    	  System.out.println("请输入你的加盟金额:");
    	  double myJiaMenJinE=sc.nextDouble();
    	  
    	  
    	  double i=f.getJiaMengJinE();
    	  if(myJiaMenJinE>i){
    		  System.out.println("可以加盟");
    	  }else{
    		  System.out.println("加盟费不够,不能加盟");
    	  }
    	  
      }else if("折扣店".equals(dianPuXuanZe)){
    	  Discount d=new Discount(0.75,0.9,true);
    	  d.kaiDian();
    	  d.biDian();
    	  d.show();
    	  
    	  System.out.println("请输入你的购买金额:");
    	  double gouMaiJinE=sc.nextDouble();
    	  if(d.isShiFouDaZhe()){
    		  System.out.println("今天打折");
    	  }else{
    		  System.out.println("今天不打折");
    	  }
    	  
      }else{
    	  System.out.println("店铺输入错误");
    	  panduan=false;
    	  break;
      }
	}
  }
}

输出结果:

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python多态练习题可以通过定义一个基类和不同的子类来实现多态性。在这个练习题中,一个基类Basse被定义,它具有Think、Eat和Sleep三个方法。然后定义了三个子类Person、Horse和Cat,它们分别继承自基类Basse,并且重写了Think、Eat和Sleep方法。最后定义了一个行为类Action,它的构造函数接受一个对象作为参数,并通过调用该对象的方法来实现多态性。 在这个练习题中,我们创建了一个Person对象Per、一个Horse对象Hor和一个Cat对象C,并且将它们分别传递给Action类的构造函数。然后我们通过调用Action对象的Think、Eat和Sleep方法来展示多态性的应用。例如,per.Eat()调用了Per对象的Eat方法,而hor.Sleep()调用了Hor对象的Sleep方法。 通过这个练习题,我们可以看到不同的对象通过继承和重写基类方法来实现了相同的动作,从而展现了多态性的特点。它使得我们可以使用统一的接口来处理不同的对象,并且根据对象的类型来调用相应的方法。这样可以提高代码的灵活性和可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python关于多态练习](https://blog.csdn.net/weixin_46601559/article/details/121285969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值