ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第3关:person类的继承使用

2021-04-17 11:01:45  阅读:166  来源: 互联网

标签:name Person 继承 age sex person 使用 eat String


任务描述

本关任务:按要求编写一个Java应用程序,巩固Java封装、继承和多态的知识。

相关知识

为了完成本关任务,你需要掌握:1.重写和重载;2.abstract(抽象类)和interface(接口);3.final关键字;4.static关键字;5.多态。

编程要求

按照要求编写一个Java应用程序:

定义一个抽象类Person,包含抽象方法eat(),封装属性name、sex、age,声明包含三个参数的构造方法;

定义一个Chinese类,继承自Person类,重写父类的eat()方法,并定义一个自己特有的方法shadowBoxing();

定义一个English类,继承自Person类,重写父类的eat()方法,并定义一个自己特有的方法horseRiding();

编写测试类,定义一个showEat()方法,使用父类作为方法的形参,实现多态,分别调用showEat()方法,通过强制类型转换调用各自类特有的方法;

具体输出要求请看测试说明。

测试说明

测试输入:

姓名:张三
性别:男
年龄:20
姓名:史蒂文
性别:男
年龄:22

预期输出:

姓名:张三,性别:男,年龄:20,我是中国人,我喜欢吃饭!
姓名:史蒂文,性别:男,年龄:22,我是英国人,我喜欢吃三明治!
张三在练习太极拳!
史蒂文在练习骑马!

开始你的任务吧,祝你成功!

源码:

package case2;

import java.util.Scanner;

public class Task2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
//		姓名:张三
//		性别:男
//		年龄:20
//		姓名:史蒂文
//		性别:男
//		年龄:22
		System.out.println("姓名:");
		String cName = sc.next();
		System.out.println("性别:");
		String cSex = sc.next();
		System.out.println("年龄:");
		int cAge = sc.nextInt();
		System.out.println("姓名:");
		String eName = sc.next();
		System.out.println("性别:");
		String eSex = sc.next();
		System.out.println("年龄:");
		int eAge = sc.nextInt();
		// 创建测试类对象test
		// 创建Person类对象person1,引用指向中国人,通过有参构造函数实例化中国人类对象
		// 通过showEat()方法调用Chinese的eat()方法
		// 创建Person类对象person2,引用指向英国人,通过有参构造函数实例化英国人类对象
		// 通过showEat()方法调用English的eat()方法
		/********* begin *********/
		Person person1=new Chinese(cName,cSex,cAge);
		showEat(person1);
		Person person2=new English(eName,eSex,eAge);
		showEat(person2);

		/********* end *********/
		// 强制类型转换(向下转型) 调用Chinese类特有的方法shadowBoxing()
		// 强制类型转换(向下转型) 调用English类特有的方法horseRiding()
		/********* begin *********/
		((Chinese)person1).shadowBoxing();
		((English)person2).horseRiding();

		/********* end *********/
	}

	// 定义showEat方法,使用父类作为方法的形参,实现多态,传入的是哪个具体对象就调用哪个对象的eat()方法
	/********* begin *********/
	public static void showEat(Person person) {
		person.eat();
	}

	/********* end *********/
}

// 抽象类Person 封装属性name、sex和age
// 构造函数初始化name、sex和age
// 声明抽象方法eat()
abstract class Person {
	/********* begin *********/
	String name;
	String sex;
	int age;
	public Person(String name,String sex,int age) {
		this.name=name;
		this.sex=sex;
		this.age=age;
	}
	public abstract void eat();

	/********* end *********/
}

// Chinese类继承自Person类
// 构造函数初始化name、sex和age
// 重写父类方法eat() 输出'姓名:name,性别:sex,年龄:age,我是中国人,我喜欢吃饭!'
// 定义子类特有方法shadowBoxing(),当父类引用指向子类对象时无法调用该方法 输出'name在练习太极拳!'
class Chinese extends Person {
	/********* begin *********/
	public Chinese(String name,String sex,int age) {
		super(name,sex,age);
	}
	public void eat() {
		System.out.printf("姓名:%s,性别:%s,年龄:%d,我是中国人,我喜欢吃饭!\n",name,sex,age);
	}
	public void shadowBoxing() {
		System.out.printf("%s在练习太极拳!\n",name);
	}

	/********* end *********/
}

// English类继承自Person类
// 构造函数初始化name、sex和age
// 重写父类方法eat() 输出'姓名:name,性别:sex,年龄:age,我是英国人,我喜欢吃三明治!'
// 定义子类特有方法horseRiding(),当父类引用指向子类对象时无法调用该方法 输出'name在练习骑马!'
class English extends Person {
	/********* begin *********/
	public English(String name,String sex,int age) {
		super(name,sex,age);
	}
	public void eat() {
		System.out.printf("姓名:%s,性别:%s,年龄:%d,我是英国人,我喜欢吃三明治!\n",name,sex,age);
	}
	public void horseRiding() {
		System.out.printf("%s在练习骑马!\n",name);
	}

	/********* end *********/
}

谢谢!!!

标签:name,Person,继承,age,sex,person,使用,eat,String
来源: https://blog.csdn.net/weixin_45784564/article/details/115790373

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有