Java学习笔记77——接口练习
猫狗案例
加入额外的跳高功能
分析:
猫:姓名,年龄,吃饭,睡觉 狗:姓名,年龄,吃饭,睡觉 由于猫和狗存在共性,所以我们提取出来到一个抽象类中
动物:
姓名,年龄,吃饭(),睡觉() 猫:继承自动物 狗:继承自动物
由于跳高是一个额外的功能,不是动物特有的,所以我们利用接口的方式定义
接口:
跳高 部分的猫:实现接口 部分的狗:实现接口
abstract class Animal3{
private String name;
private int gae;
public Animal3() {
}
public Animal3(String name, int gae) {
this.name = name;
this.gae = gae;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGae() {
return gae;
}
public void setGae(int gae) {
this.gae = gae;
}
//抽象方法
public abstract void eat();
public abstract void sleep();
}
class Cat3 extends Animal3{
public Cat3() {
}
public Cat3(String name, int gae) {
super(name, gae);
}
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫趴着睡");
}
}
class Dog3 extends Animal3{
public Dog3() {
}
public Dog3(String name, int gae) {
super(name, gae);
}
@Override
public void eat() {
System.out.println("狗吃肉");
}
@Override
public void sleep() {
System.out.println("狗侧着睡");
}
}
//定义跳高的接口
interface Jump{
public abstract void jump();
}
//定义部分会跳高的猫
class JumpCat extends Cat3 implements Jump{
public JumpCat() {
}
public JumpCat(String name, int gae) {
super(name, gae);
}
@Override
public void jump() {
System.out.println("猫跳高");
}
}
//定义部分会跳高的狗
class JumpDog extends Dog3 implements Jump{
public JumpDog() {
}
public JumpDog(String name, int gae) {
super(name, gae);
}
@Override
public void jump() {
System.out.println("狗跳高");
}
}
public class InterfaceTest1 {
public static void main(String[] args) {
//创建不会跳高的狗
Animal3 a1 = new Dog3("小白",2);
a1.eat();
a1.sleep();
//创建一个会跳高的狗
Dog3 d1 = new JumpDog("大黄",3);
d1.eat();
d1.sleep();
((JumpDog) d1).jump();
Jump j1 = new JumpDog("小黑",4);
// j1.eat();
((JumpDog) j1).eat();
// j1.sleep();
((JumpDog) j1).sleep();
j1.jump();
}
}
老师和学生案例
加入抽烟的额外功能
分析:
老师:姓名,年龄,吃饭,睡觉 学生:姓名,年龄,吃饭,睡觉
由于老师和学生有着共性内容,提取出来一个抽象类
人:
姓名,年龄,吃饭(),睡觉(){}
由于抽烟不是所有的学生和老师都会的,只有部分老师和学生才会
定义一个抽烟接口
部分老师抽烟:实现抽烟接口 部分学生抽烟:实现抽烟接口
//抽烟接口
interface Smoking{
//抽烟的抽象方法
public abstract void smoke();
}
//定义抽象类---人
abstract 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 abstract void eat();
//定义一个具体的睡觉方法
public void sleep(){
System.out.println("睡觉");
}
}
class Teacher extends Person{
public Teacher() {
}
public Teacher(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("老师喝粥");
}
}
class Student extends Person{
public Student() {
}
public Student(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("学生吃山珍海味");
}
}
//定义部分抽烟老师类
class SomkeTeacher extends Teacher implements Smoking{
public SomkeTeacher() {
}
public SomkeTeacher(String name, int age) {
super(name, age);
}
@Override
public void smoke() {
System.out.println("老师抽烟");
}
}
//定义部分抽烟学生类
class SmokeStudent extends Student implements Smoking{
public SmokeStudent() {
}
public SmokeStudent(String name, int age) {
super(name, age);
}
@Override
public void smoke() {
System.out.println("学生抽烟");
}
}
public class InterfaceTest2 {
public static void main(String[] args) {
//创建一个不抽烟的学生对象
Person p = new Student("潘磊",15);
p.eat();
p.sleep();
//创建一个抽烟的学生对象
Student s = new SmokeStudent("刘生发",18);
s.eat();
((SmokeStudent) s).smoke();
s.sleep();
}
}
教练和运动员案例
乒乓球运动员和篮球运动员。 乒乓球教练和篮球教练。 为了出国交流,跟乒乓球相关的人员都需要学习英语。 请用所学知识: 分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。
分析:
学习英语(接口):
学习英语
人(抽象类):
姓名,年龄,运动
教练 extends 人:
乒乓球教练 extends 教练 implements 学习英语 篮球教练 extends 教练
运动员 extends 人:
乒乓球运动员 extends 运动员 implements 学习英语 篮球运动员 extends 运动员
public interface StudyEnglish {
public abstract void studyEnglish();
}
abstract 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 abstract void sport();
}
public abstract class CoachMan extends Person {
public CoachMan() {
}
public CoachMan(String name, int age) {
super(name, age);
}
}
public abstract class SportMan extends Person{
public SportMan() {
}
public SportMan(String name, int age) {
super(name, age);
}
}
public class PingPangCoachImpl extends CoachMan implements StudyEnglish {
public PingPangCoachImpl() {
}
public PingPangCoachImpl(String name, int age) {
super(name, age);
}
@Override
public void sport() {
System.out.println("乒乓球教练教乒乓球");
}
@Override
public void studyEnglish() {
System.out.println("乒乓球教练学习英语");
}
}
public class BasketballCoach extends CoachMan {
public BasketballCoach() {
}
public BasketballCoach(String name, int age) {
super(name, age);
}
@Override
public void sport() {
System.out.println("篮球教练教打篮球");
}
}
public class PingPangSportManImpl extends SportMan implements StudyEnglish {
public PingPangSportManImpl() {
}
public PingPangSportManImpl(String name, int age) {
super(name, age);
}
@Override
public void sport() {
System.out.println("乒乓球运动员打乒乓球");
}
@Override
public void studyEnglish() {
System.out.println("乒乓球运动员学习英语");
}
}
public class BasketballMan extends SportMan {
public BasketballMan() {
}
public BasketballMan(String name, int age) {
super(name, age);
}
@Override
public void sport() {
System.out.println("篮球运动员打篮球");
}
}
public class DemoTest {
public static void main(String[] args) {
//创建一个乒乓球运动员
SportMan sm = new PingPangSportManImpl("吕常福",18);
sm.sport();
//向下转型使用特有的方法
((PingPangSportManImpl) sm).studyEnglish();
//创建篮球教练
CoachMan cm = new BasketballCoach("刘生发",17);
cm.sport();
}
}
新建四个包:
bean:BasketballCoach、BasketballMan
controller: DemoTest
dao:Person、CoachMan、SportMan

浙公网安备 33010602011771号