欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA day08:代码练习(多态)

程序员文章站 2024-03-21 19:11:58
...

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);
	}
}

运行结果:

JAVA day08:代码练习(多态)

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("不是");
		}
	}
}

运行结果 :

 JAVA day08:代码练习(多态)