Task01
问题
简答题:
结合多态发生的条件,及继承相关知识,自己总结并验证下,哪些方法无法实现多态效果。
答案
1.父类中的private方法(不能被子类覆盖)
2.父类中的构造方法(不能被子类继承)
3.父类中的静态方法(不能被子类覆盖)
4.父类中被final修饰的方法(不能被子类覆盖)
Task02
问题
实现如下多态案例:分别定义Person类,SouthPerson(表示南方人),NorthPerson(表示北方人)
Person
eat()
SouthPerson
eat()
NorthPerson
eat()
写代码实现,eat方法的多态效果
1:人要吃饭
2:南方人吃炒菜和米饭
3:北方人吃烩菜和馒头
代码
package day08.Task02;
public class Task01 {
public static void main(String[] args) {
NorthPerson northPerson = new NorthPerson();
SouthPerson southPerson = new SouthPerson();
eat(southPerson);
eat(northPerson);
}
public static void eat(Person person){
person.eat();
}
}
class Person{
public void eat(){
}
}
class SouthPerson extends Person{
public void eat(){
System.out.println("南方人吃炒菜和米饭");
}
}
class NorthPerson extends Person{
public void eat(){
System.out.println("北方人吃烩菜和馒头");
}
}
结果
Task03
问题
为某研究所编写一个通用程序:
用该程序来计算每一种交通工具运行 1000公里所需的时间.已知每种交通工具的参数都是3个整数常量 A、B、C的表达式。
现有两种工具:Car 和Plane,
其中Car 的速度运算公式为:A*B/C,
Plane 的速度运算公式为 :A+B+C。
要求在未来如果增加第3种交通工具(如Ship)的时候,可以做到复用已有代码。 Ship的速度运算公式为 :A+B/C。
这里复用已有代码的意思是,比如专门定义了一个方法,用来计算所有交通工具的,移动指定距离所用 的时间 ,
可以不改变这个方法,继续用它计算新增加的交通工具的运行时间
double calculateTime(int distance, 计算对象) {
return 计算结果
}
代码
package day08.Task03;
public class Task03 {
public static void main(String[] args) {
double A = 5;
double B = 6;
double C = 7;
SpeedFather speedFather;
speedFather = new CarSpeed();
System.out.println("汽车的速度为:" + speedFather.speed(A,B,C));
System.out.println("汽车走完1000公里所需的时间为:" + calculateTime(1000,speedFather.speed(A,B,C)));
speedFather = new PlaneSpeed();
System.out.println("飞机的速度为:" + speedFather.speed(A,B,C));
System.out.println("飞机走完1000公里所需的时间为:" + calculateTime(1000,speedFather.speed(A,B,C)));
speedFather = new ShipSpeed();
System.out.println("轮船的速度为:" + speedFather.speed(A,B,C));
System.out.println("轮船走完1000公里所需的时间为:" + calculateTime(1000,speedFather.speed(A,B,C)));
}
public static double calculateTime(int distance, double speed) {
return distance/speed;
}
}
class SpeedFather{
double A;
double B;
double C;
public double speed(double A, double B, double C){
return 0;
}
}
class CarSpeed extends SpeedFather{
public double speed(double A, double B, double C){
return A*B/C;
}
}
class PlaneSpeed extends SpeedFather{
public double speed(double A, double B, double C){
return A+B+C;
}
}
class ShipSpeed extends SpeedFather{
public double speed(double A, double B, double C){
return A+B/C;
}
}
结果
Task04
问题
乒乓球运动员和足球运动员。
乒乓球教练和足球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析,这个案例中有哪些抽象类,哪些接口,哪些具体类
乒乓球用运动员 属性 name age salary learnEnglish()
行为 eat() sleep() train() match()
足球运动员 属性 name age salary
行为 eat() sleep() train() match()
乒乓球教练: nama age salary bonus
eat(),sleep(), teach(),learnEnglish()
足球教练: nama age salary bonus
eat(),sleep(), teach()
代码
package day08.Task04;
public class Task04 {
}
class Human{
String name;
int age;
int salary;
public Human() {
}
public Human(String name, int age, int salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
abstract class Athlete extends Human{
public abstract void train();
public abstract void match();
}
abstract class Coach extends Human{
int bonus;
public Coach(int bonus) {
this.bonus = bonus;
}
public Coach() {
}
public abstract void teach();
}
interface LearnEnglish{
public void learnEnglish();
}
class TabletennisAthlete extends Athlete implements LearnEnglish{
public void train(){
System.out.println(name + " train table tennis");
}
public void match(){
System.out.println(name + "match table tennis");
}
public void learnEnglish(){
System.out.println(name + "learn English");
}
}
class TabletennisCoach extends Coach implements LearnEnglish{
public void teach(){
System.out.println(name + " teach table tennis");
}
public void learnEnglish(){
System.out.println(name + "learn English");
}
}
class FootballAthlete extends Athlete{
public void train(){
System.out.println(name + " train football ");
}
public void match(){
System.out.println(name + "match football");
}
}
class FootballCoach extends Coach {
public void teach(){
System.out.println(name + " teach football");
}
}
train(){
System.out.println(name + " train football ");
}
public void match(){
System.out.println(name + "match football");
}
}
class FootballCoach extends Coach {
public void teach(){
System.out.println(name + " teach football");
}
}