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

service:StudyEnglish、PingPangCoachImpl、PingPangSportManImpl(实现的类后面加Impl)

posted @ 2021-12-12 22:14  欧朋  阅读(103)  评论(0)    收藏  举报