JavaSE第7天练习题(面向对象二,继承、多态、super关键字)

一、 基础案例

1. 训练案例1

1.1. 训练描述:【继承】
一、 分析以下需求,并用代码实现:

  1. 定义Person类
    属性:姓名name、年龄age;
    方法:空参构造方法、满参构造方法、setXxx()、getXxx()、工作work。
  2. 根据人类,派生一个老师类Teacher
    重写工作方法(老师的工作是要好好讲课)。
  3. 根据人类,派生一个学生类Student
    重写工作方法(学生的工作是要好好学习)。
  4. 编写测试类分别对上述2类具体人物进行测试
  5. 要求运行结果:
    学生的工作要好好学习
    老师的工作要好好讲课
public class Person {
	private String name;
	private int age;
	
	public Person() {
		super();
		
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public void word(){
		System.err.println("每个人要好好工作");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
public class Teacher extends Person{
	
	public Teacher() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Teacher(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	public void word(){
		System.out.println("老师的工作要好好讲课");
	}
}

public class Student extends Person{	
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Student(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	public void word(){
		System.out.println("学生的工作要好好学习");
	}
}
public class Main701 {
	public static void main(String[] args) {
		Person t = new Teacher("王老师",45);
		System.out.println(t.getName()+"今年年龄是"+t.getAge());
		t.word();
		Person s = new Student("小明同学",15);
		System.out.println(s.getName()+"今年年龄是"+s.getAge());
		s.word();
	}
}

2. 训练案例2

2.1. 训练描述:【继承、方法重写】

  • 分析以下需求,要求用代码实现:
  1. 定义手机类
    方法:发短信,打电话(手机的功能是给某人打电话)

  2. 根据手机类,派生一个新手机类
    重写打电话功能(新功能可以开启视频电话,同时要包含老功能)

  3. 编写测试类分别对上述2类手机进行测试

  4. 要求运行结果:
    给林青霞打电话
    开启视频功能

    给林青霞发短信

public class Iphone3 {
	public void call(){
		System.out.println("给林青霞打电话");
		
	}
	public void send(){
		System.out.println("给林青霞发短信");
	}
}

public class Iphone4 extends Iphone3{
	@Override
	public void call(){
		System.out.println("给林青霞打电话");
		System.out.println("开启视频功能");
	}
}

public class Main702 {
	public static void main(String[] args) {
		Iphone4 phone = new Iphone4();
		phone.call();
		phone.send();
	}
}

3. 训练案例3

3.1. 训练描述:【多态】
一、 分析以下需求,并用代码实现:

  1. 定义Animal动物类
    方法:吃东西eat。
  2. 根据动物类,派生一个猫类Cat
    重写吃东西方法(猫吃鱼)。
  3. 根据动物类,派生一个狗类Dog
    重写吃东西方法(狗吃骨头)。
    狗还有一个特有方法,狗看门
  4. 根据动物类,派生一个猪类Pig
    重写吃东西方法(猪吃白菜)。
  5. 根据操作动物类AnimalOperator
    方法:调用动物的吃方法
  6. 编写测试类分别对上述4类事物AnimalOperator、Cat、Dog、Pig创建对象,调用吃东西功能,进行测试
  7. 要求运行结果:
    猫吃鱼
    狗吃骨头
    猪吃白菜
public class Animal {
	public void eat(){
		System.out.println("吃东西");
	}
}
public class Cat extends Animal{
	@Override
	public void eat(){
		System.out.println("猫吃鱼");
	}
}
public class Dog extends Animal{
	public void eat(){
		System.out.println("狗吃骨头");
	}
}

public class Pig extends Animal{
	public void eat(){
		System.out.println("猪吃白菜");
	}
	
}
public class AnimalOperator {
	public void useAnimal(Animal a) {
		a.eat();
	}
}

public class Main703 {
	public static void main(String[] args) {
		Cat c = new Cat();
		Dog d = new Dog();
		Pig p = new Pig();
		AnimalOperator chi = new AnimalOperator();
		chi.useAnimal(c);
		chi.useAnimal(d);
		chi.useAnimal(p);
	}
}

二、 扩展案例

1. 训练案例1

1.1. 训练描述:
一、 分析以下需求,并用代码实现:

扫描二维码关注公众号,回复: 9339885 查看本文章
  1. 定义Person类
    属性:
    姓名name、性别gender、年龄age、国籍nationality;
    方法:吃饭eat、睡觉sleep,工作work。
    2.根据人类,派生一个学生类Student
    增加属性:
    学校school、学号stuNumber;
    重写工作方法(学生的工作是学习)。
    3.根据人类,派生一个工人类Worker
    增加属性:
    单位unit、工龄workAge;
    重写工作方法(工人的工作是盖房子)。
    4.根据学生类,派生一个学生干部类 StudentLeader
    增加属性:
    职务job;
    增加方法:开会meeting。
    5.编写测试类分别对上述3类具体人物进行测试。
    6.要求运行结果:
    学生需要学习!
    工人的工作是盖房子!
    学生干部喜欢开会!
public class Person {
	private String name;
	private String gender;
	private int age;
	private String nationality;

	public void eat() {

	}

	public void sleep() {

	}

	public void work() {

	}
	
}
public class Student extends Person{
	private String school;
	private String stuNumber;
	@Override
	public void work(){
		System.out.println("学生的工作是学习");
	}
	public String getSchool() {
		return school;
	}
	public void setSchool(String school) {
		this.school = school;
	}
	public String getStuNumber() {
		return stuNumber;
	}
	public void setStuNumber(String stuNumber) {
		this.stuNumber = stuNumber;
	}	
	
}
public class Worker extends Person{
	private String unit;
	private int Worker;
	@Override
	public void work(){
		System.out.println("工人的工作是盖房子");
	}	
}

public class StudentLeader {
	private String job;
	public void meeting(){
		System.out.println("学生干部喜欢开会!");
	}
}
public class Main711 {
	public static void main(String[] args) {
		Student s1 = new Student();
		s1.work();
		Worker w = new Worker();
		w.work();
		StudentLeader s2 = new StudentLeader();
		s2.meeting();
	}
}

2. 训练案例2

2.1. 训练描述:
一、 分析以下需求,并用代码实现

  1. 定义项目经理类
    属性:
    姓名 工号 工资 奖金
    行为:
    工作work
  2. 定义程序员类
    属性:
    姓名 工号 工资
    行为:
    工作work
  3. 要求:向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法
  4. 编写测试类:完成这两个类的测试
public class Staff {
	private String name;
	private String num;
	private int wage;
	
	public void work(){
		
	}
	
}

public class Manager extends Staff {
	private int bonus;

	@Override
	public void work() {
		System.out.println("经理的工作是管理项目");
	}
}
public class Programmer extends Staff{
	@Override
	public void work() {
		System.out.println("程序员的工作是敲代码");
	}
}

public class Main705 {
	public static void main(String[] args) {
		Programmer p = new Programmer();
		p.work();
		Manager m = new Manager();
		m.work();
	}
}

发布了30 篇原创文章 · 获赞 10 · 访问量 892

猜你喜欢

转载自blog.csdn.net/weixin_45788152/article/details/104232082