JAVA day08:代码练习(多态)

1.练习向上转型和向下转型

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

//Person类
public class Person {
	public String name;	
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Person(String name) {
		super();
		this.name = name;
	}
	public void eat(){
	}
}

//SouthPerson类
public class SouthPerson extends Person{
	@Override
	public void eat() {
		System.out.println("米饭");
	}
}

//NorthPerson类
public class NorthPerson extends Person{
	@Override
	public void eat() {
		System.out.println("馒头");
	}
}

//Cook类
public class Cook {
	/*public void cook(Person p){
		if(p.name.equals("南方人")){
			p=new SouthPerson();
			p.eat();
		}else if(p.name.equals("北方人")){
			p=new NorthPerson();
			p.eat();
		}
	}*/
	//向上转型
	public void cook(Person p){
		if(p instanceof SouthPerson){
			//向下转型
			SouthPerson sp=(SouthPerson)p;
			sp.eat();
		}else if(p instanceof NorthPerson){
			NorthPerson np=(NorthPerson)p;
			np.eat();
		}
	}
}

//测试类
public class Test {
	public static void main(String[] args) {
		Cook c=new Cook();
		/*Person p1=new Person("北方人");
		Person p2=new Person("南方人");*/
		
		//定义一个南方人
		SouthPerson p1= new SouthPerson();
		p1.name="张南方";
		//定义一个北方人
		NorthPerson p2= new NorthPerson();
		p2.name="李北方";
		//定义一个厨师
		Cook p3 = new Cook();
		p1.eat();
		p2.eat();
		//调用厨师做菜方法
		c.cook(p1);
		c.cook(p2);
	}
}

运行结果:

2.

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

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

//DYBookStore类
public class DYBookStore extends BookStore{
	@Override
	public void bookType() {
		System.out.println("售卖中学生杂志读物");
	}
}

//XHBookStore类
public class XHBookStore extends BookStore{
	@Override
	public void bookType() {
		System.out.println("售卖中小学生读物");
	}
}

//Student类
public class Student {
	public void buy(BookStore b){
		if(b instanceof DYBookStore){
			//向下转型
			DYBookStore db=(DYBookStore)b;
			db.bookType();
		}else if(b instanceof XHBookStore){
			XHBookStore xb=(XHBookStore)b;
			xb.bookType();
		}
	}
}

//测试类
public class Test {
	public static void main(String[] args) {
		XHBookStore xb=new XHBookStore();
		DYBookStore db=new DYBookStore();
		Student xiaostu=new Student();
		Student zhongstu=new Student();
		xiaostu.buy(xb);
		zhongstu.buy(db);
	}
}

3.

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

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

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

//SaltDrink类
public class SaltDrink extends Drink{
	@Override
	public void taste() {
		System.out.println("我是盐汽水,我是咸的");
	}
}

//测试类
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		System.out.println("请输入您的口味:");
		Scanner sc=new Scanner(System.in);
		String wei=sc.next();
		
		//sell(wei);
		Drink d=sell(wei);
		d.taste();
	}
	/*public static void sell(String wei){
		if(wei.equals("甜的")){
			Drink d= new Coco();
			Coco c=(Coco)d;
			c.taste();
		}else if(wei.equals("咸的")){
			Drink d= new SaltDrink();
			SaltDrink s=(SaltDrink) d;
			s.taste();
		}
	}*/
	public static Drink sell(String wei){
		Drink d=null;
		if(wei.equals("甜的")){
			//向上转型
			d= new Coco();
		}else if(wei.equals("咸的")){
			//向上转型
			d= new SaltDrink();
		}else{
			System.out.println("输入错误");
			d=new Drink();//避免空指针异常
		}
		return d;
	}
}

6.题目3:综合应用3

完成以下题目       
要求:
定义一个人类(Person),有吃饭,睡觉,走路3种方法,
再定义一个银行家类(Banker),继承自人类,有自己的特有方法:投资(invest)。   重写走路方法-乘飞机。
再定义一个程序员类(Coder),继承自人类,有自己的特有方法:写代码(coding)重写走路方法-成火箭。
编写测试类,在测试类中生成一个程序员和一个银行家,然后实现多态性的程序设计
评分标准:
(7) 正确定义人类(Person)(10分)
(8) 正确定义银行家类(Banker)(10分)
(9) 正确定义编写测试类,并正确输出10分)

//Person类
public class Person {
	public void eat(){		
	}
	public void sleep(){		
	}
	public void walk(){	
	}
}

//Banker类
public class Banker extends Person{
	//投资
	public void invest(){
		System.out.println("投资");
	}
	@Override
	public void walk() {
		System.out.println("乘飞机");
	}
}

//Coder类
public class Coder extends Person{
	public void coding(){
		System.out.println("敲代码");
	}
	@Override
	public void walk() {
		System.out.println("乘火箭");
	}
}

//测试类
public class Test {
	public static void main(String[] args) {
		Person p;
		p=new Coder();
		p.walk();
		Coder c=(Coder)p;
		c.coding();
		
		p=new Banker();
		p.walk();
		Banker d=(Banker)p;
		d.invest();
		if(p instanceof Coder){//判断对象类型
			System.out.println("是程序员");
		}else if(p instanceof Banker){//判断对象类型
			System.out.println("是银行家");
		}else{
			System.out.println("不是");
		}
	}
}

运行结果 :

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值