类与对象(抽象类、接口)练习
需求:我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。请分析,这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现。
分析:从具体到抽象
实现:从抽象到具体
使用:使用的是具体的类的对象
抽象说英语接口:
1 package test; 2 //说英语的接口 3 public interface SpeakEnglish { 4 public abstract void speak(); 5 }public interface SpeakEnglish
抽象人类:
1 package test; 2 //抽象人类 3 public abstract class Person { 4 private String name; 5 private int age; 6 //无参构造函数 7 public Person() { 8 super(); 9 } 10 //有参构造函数 11 public Person(String name, int age) { 12 super(); 13 this.name = name; 14 this.age = age; 15 } 16 17 public String getName() { 18 return name; 19 } 20 public void setName(String name) { 21 this.name = name; 22 } 23 public int getAge() { 24 return age; 25 } 26 public void setAge(int age) { 27 this.age = age; 28 } 29 //吃的抽象方法 30 public abstract void eat(); 31 }public abstract class Person
抽象教练类:
1 package test; 2 //抽象教练类 3 public abstract class Coach extends Person{ 4 //无参构造函数 5 public Coach() { 6 super(); 7 } 8 //有参构造函数 9 public Coach(String name, int age) { 10 super(name, age); 11 } 12 //教授的抽象方法 13 public abstract void teach(); 14 }public abstract class Coach extends Person
抽象运动员类:
1 package test; 2 //抽象运动员类 3 public abstract class Player extends Person{ 4 //无参构造函数 5 public Player() { 6 super(); 7 } 8 //有参构造函数 9 public Player(String name, int age) { 10 super(name, age); 11 } 12 //学习的抽象方法 13 public abstract void study(); 14 }public abstract class Player extends Person
具体篮球教练类:
1 package test; 2 3 public class BasketballCoach extends Coach{ 4 5 public BasketballCoach() { 6 super(); 7 } 8 9 public BasketballCoach(String name, int age) { 10 super(name, age); 11 } 12 13 @Override 14 public void teach() { 15 System.out.println("篮球教练教如何运球和投篮"); 16 } 17 18 @Override 19 public void eat() { 20 System.out.println("篮球教练吃肉"); 21 } 22 }public class BasketballCoach extends Coach
具体乒乓球教练类:
1 package test; 2 3 public class PingPangCoach extends Coach implements SpeakEnglish{ 4 public PingPangCoach() { 5 super(); 6 } 7 8 public PingPangCoach(String name, int age) { 9 super(name, age); 10 } 11 12 @Override 13 public void teach() { 14 System.out.println("乒乓球教练教如何发球和接球"); 15 } 16 17 @Override 18 public void eat() { 19 System.out.println("乒乓球教练吃馒头"); 20 } 21 22 @Override 23 public void speak() { 24 System.out.println("乒乓球教练说英语"); 25 } 26 }public class PingPangCoach extends Coach implements SpeakEnglish
具体篮球运动员类:
1 package test; 2 3 public class BasketballPlayer extends Player{ 4 5 public BasketballPlayer() { 6 super(); 7 } 8 9 public BasketballPlayer(String name, int age) { 10 super(name, age); 11 } 12 13 @Override 14 public void study() { 15 System.out.println("篮球运动员学习如何运球和投篮"); 16 } 17 18 @Override 19 public void eat() { 20 System.out.println("篮球运动运吃肉"); 21 } 22 }public class BasketballPlayer extends Player
具体乒乓球运动员类:
1 package test; 2 3 public class PingPangPlayer extends Player implements SpeakEnglish{ 4 public PingPangPlayer() { 5 super(); 6 } 7 8 public PingPangPlayer(String name, int age) { 9 super(name, age); 10 } 11 12 @Override 13 public void study() { 14 System.out.println("乒乓球运动员学习如何发球和接球"); 15 } 16 17 @Override 18 public void eat() { 19 System.out.println("乒乓球运动员吃馒头"); 20 } 21 22 @Override 23 public void speak() { 24 System.out.println("乒乓球运动员说英语"); 25 } 26 }public class PingPangPlayer extends Player implements SpeakEnglish
测试类:
1 package test; 2 //测试类 3 public class PersonDemo { 4 public static void main(String[] args) { 5 //创建乒乓球运动员对象 6 PingPangPlayer pingPang=new PingPangPlayer(); 7 pingPang.setName("张三"); 8 pingPang.setAge(25); 9 System.out.println(pingPang.getName()+","+pingPang.getAge()); 10 pingPang.eat(); 11 pingPang.study(); 12 pingPang.speak(); 13 System.out.println("----------------------"); 14 15 //创建篮球运动员对象 16 BasketballPlayer lanQiu=new BasketballPlayer("李四",20); 17 System.out.println(lanQiu.getName()+","+lanQiu.getAge()); 18 lanQiu.eat(); 19 lanQiu.study(); 20 } 21 22 }public class PersonDemo
测试运行结果如下: