Java基础第7天
继承、多态、super关键字
基础案例
- 训练案例1
- 训练描述:【继承】
- 分析以下需求,并用代码实现:
- 定义Person类
属性:姓名name、年龄age;
方法:空参构造方法、满参构造方法、setXxx()、getXxx()、工作work。
- 根据人类,派生一个老师类Teacher
重写工作方法(老师的工作是要好好讲课)。
- 根据人类,派生一个学生类Student
重写工作方法(学生的工作是要好好学习)。
- 编写测试类分别对上述2类具体人物进行测试
- 要求运行结果:
package day07.test01;
public class Person {
private String name;
private int age;
public Person() {
};
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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 void work(){
}
}
package day07.test01;
public class Student extends Person {
public void work(){
System.out.println("好好学习");
}
}
package day07.test01;
public class Teahcer extends Person {
public void work(){
System.out.println("好好讲课");
}
}
package day07.test01;
public class Test01 {
public static void main(String[] args) {
Student student = new Student();
student.work();
Teahcer teahcer = new Teahcer();
teahcer.work();
}
}
学生的工作要好好学习
老师的工作要好好讲课
-
-
- 操作步骤描述
-
略
-
- 训练案例2
- 训练描述:【继承、方法重写】
- 训练案例2
- 分析以下需求,要求用代码实现:
- 定义手机类
方法:打电话(手机的功能是给某人打电话)
- 根据手机类,派生一个新手机类
重写打电话功能(新功能可以开启视频电话,同时要包含老功能)
- 编写测试类分别对上述2类手机进行测试
- 要求运行结果:
给林青霞打电话
----------------------
开启视频功能
给林青霞打电话
-
-
- 操作步骤描述
-
略
package day07.test02;
public class Phone {
public void call(String name){
System.out.println("call"+ name );
}
}
package day07.test02;
public class NewPhone extends Phone {
public void call(String name) {
//重写父类的方法
System.out.println("vedio call" + name);
//复用父类的方法
super.call(name);
}
}
package day07.test02;
public class Test {
public static void main(String[] args) {
Phone phone1 = new Phone();
phone1.call("林青霞");
System.out.println("---------------");
NewPhone phone = new NewPhone();
phone.call("林青霞");
}
}
-
- 训练案例3
- 训练描述:【多态】
- 训练案例3
- 分析以下需求,并用代码实现:
- 定义Animal动物类
方法:吃东西eat。
- 根据动物类,派生一个猫类Cat
重写吃东西方法(猫吃鱼)。
- 根据动物类,派生一个狗类Dog
重写吃东西方法(狗吃骨头)。
狗还有一个特有方法,狗看门
- 根据动物类,派生一个猪类Pig
重写吃东西方法(猪吃白菜)。
- 根据操作动物类AnimalOperator
方法:调用动物的吃方法
- 编写测试类分别对上述4类事物AnimalOperator、Cat、Dog、Pig创建对象,调用吃东西功能,进行测试
- 要求运行结果:
猫吃鱼
狗吃骨头
猪吃白菜
package day07.test03;
public class AnimalOperator {
public void animal( Animal animal){
animal.eat();
}
}
package day07.test03;
public class Animal {
public void eat(){
System.out.println("吃东西eat");
}
}
package day07.test03;
public class Cat extends Animal {
public void eat(){
System.out.println("猫吃鱼");
}
}
package day07.test03;
public class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
public void lookdoor(){
System.out.println("狗看门");
}
}
package day07.test03;
public class Pig extends Animal {
public void eat(){
System.out.println("猪吃白菜");
}
}
package day07.test03;
public class Test {
public static void main(String[] args) {
AnimalOperator animal = new AnimalOperator();
Cat a = new Cat();
Dog b = new Dog();
Pig c = new Pig();
animal.animal(a);
animal.animal(b);
animal.animal(c);
}
}
-
-
- 操作步骤描述
-
略
- 扩展案例
- 训练案例1
- 训练描述:
- 训练案例1
- 分析以下需求,并用代码实现:
1. 定义Person类
属性:
姓名name、性别gender、年龄age、国籍nationality;
方法:吃饭eat、睡觉sleep,工作work。
2.根据人类,派生一个学生类Student
增加属性:
学校school、学号stuNumber;
重写工作方法(学生的工作是学习)。
3.根据人类,派生一个工人类Worker
增加属性:
单位unit、工龄workAge;
重写工作方法(工人的工作是盖房子)。
4.根据学生类,派生一个学生干部类 StudentLeader
增加属性:
职务job;
增加方法:开会meeting。
5.编写测试类分别对上述3类具体人物进行测试。
6.要求运行结果:
学生需要学习!
工人的工作是盖房子!
学生干部喜欢开会!
-
-
- 操作步骤描述
-
略
package day07.test04;
public class Person {
private String name;
private String sex;
private int age;
private String nationality;
public Person(String name, String sex, int age, String nationality) {
this.name = name;
this.sex = sex;
this.age = age;
this.nationality = nationality;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public void eat(){};
public void sleep(){};
public void work(){};
}
package day07.test04;
public class Student extends Person {
private String school;
private String stuNumber;
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 Student(){};
public Student(String name, String sex, int age, String nationality, String school, String stuNumber) {
super(name, sex, age, nationality);
this.school = school;
this.stuNumber = stuNumber;
}
@Override
public void work(){
System.out.println("study");
}
}
package day07.test04;
public class StudentLeader extends Student {
private String job;
public StudentLeader(String name, String sex, int age, String nationality, String school, String stuNumber,String job) {
super(name, sex, age, nationality,school,stuNumber);
this.job = job;
}
public StudentLeader(){};
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public void meeting(){
System.out.println("meeting");
}
}
package day07.test04;
public class Worker extends Person{
private String unit;
private int workAge;
public Worker(String name, String sex, int age, String nationality,String unit,int workAge) {
super(name, sex, age, nationality);
this.unit = unit;
this.workAge=workAge;
}
public Worker() {
}
@Override
public void work(){
System.out.println("盖房子");
}
}
package day07.test04;
public class test04 {
public static void main(String[] args) {
Student s = new Student("龙猫", "男孩子", 20, "我家", "哈哈", "001");
System.out.println(s.getName() + " " + s.getSex() +" " + s.getAge() + " " + s.getNationality()+ " " + s.getSchool()+ " " + s.getStuNumber());
s.work();
Worker w = new Worker("哆啦A梦", "male", 10, "我家", "教我代码", 10);
w.work();
StudentLeader leader = new StudentLeader("超人", "male", 8, "中国", "超人学校", "1", "救人");
leader.work();
}
}
-
- 训练案例2
- 训练描述:
- 训练案例2
- 分析以下需求,并用代码实现
- 定义项目经理类
属性:
姓名 工号 工资 奖金
行为:
工作work
- 定义程序员类
属性:
姓名 工号 工资
行为:
工作work
- 要求:向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法
- 编写测试类:完成这两个类的测试
-
- 操作步骤描述
-
略
package day07.test05;
public class Worker {
private String name;
private int ID;
private double salary;
public Worker() {
}
public Worker(String name, int ID, double salary) {
this.name = name;
this.ID = ID;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void work(){
System.out.println("work");
}
}
package day07.test05;
public class Coder extends Worker{
public Coder(String may, int id, String s){};
public Coder(String name, int ID, double salary) {
super(name, ID, salary);
}
}
package day07.test05;
public class Maneger extends Worker {
private double jianjing;
public Maneger(String name, int ID, double salary, double jianjing) {
super(name, ID, salary);
this.jianjing = jianjing;
}
public double getJianjing() {
return jianjing;
}
public void setJianjing(double jianjing) {
this.jianjing = jianjing;
}
}
package day07.test05;
public class Test {
public static void main(String[] args) {
Maneger maneger = new Maneger("john",001,1000,500);
Coder coder = new Coder("may",002,10000);
System.out.println(maneger.getName() + " " +maneger.getID() + " " + maneger.getSalary() + " " + maneger.getJianjing());
System.out.println(coder.getName() + " " + coder.getID() + " " + coder.getSalary());
}
}
-
- 训练案例3
- 训练描述:
- 训练案例3
- 分析以下需求,并用代码实现
- 已知学生类和老师类如下:
属性:
姓名,年龄
行为:
吃饭
老师有特有的方法:
讲课
学生有特有的方法:
学习
- 要求:向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法
- 编写测试类:完成这两个类的测试
-
- 操作步骤描述
-
略
-
- 训练案例4
- 训练描述:
- 训练案例4
- 分析以下需求,并用代码实现:
1.定义员工类:
属性:
工号,姓名
行为:
工作方法(用简单的输出语句模拟)
2.定义经理类:
属性:
工号,姓名,奖金
行为:
工作方法(管理员工,简单输出语句模拟)
3.定义服务员类:
属性:
工号,姓名
行为:
工作方法(为客户服务,简单输出语句模拟)
4.定义测试类:
分别创建经理类对象和服务员类对象
调用各自的工作方法
要求:
分析各个事物之间的继承关系,抽取出相关的类
-
-
- 操作步骤描述
-
略