接口定义的是规则:

使用接口:就是实现接口、实现接口的关键字 implements,重写方法

使用接口的时候需要注意:
1.接口是没有静态代码块或者构造方法的
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
格式:
public class MyInterfaceImpl implements MyInterfaceA MyInterfaceB{
//覆盖重写所有抽象方法
}

父类(抽象类):

  1. /**
  2. *
  3. * 抽象类 - 父类
  4. * 可以设置构造函数
  5. *
  6. */
  7. package Test13_Demo.Demo04;/*
  8. @create 2020--12--01--10:13
  9. */
  10. public abstract class Employee {
  11. //属性
  12. private String name;
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. /**
  20. * 抽象类中的构造方法不能被程序直接调用,因为该类是一个抽象类,不能实例化对象
  21. * 但是在创建子类(普通类)的时候,子类构造函数会默认调用父类的无参构造函数,为了子类对象的父类存储空间赋值
  22. */
  23. //无参构造
  24. public Employee() {
  25. super();
  26. }
  27. //有参构造
  28. public Employee(String name) {
  29. super();
  30. this.name = name;
  31. }
  32. //定义成员方法 - 抽象方法
  33. public abstract void work();
  34. //抽象类中可以保存普通方法
  35. public void test() {
  36. System.out.println("我是一个普通方法");
  37. }
  38. }

接口:

  1. /**
  2. *
  3. * 引入接口:
  4. *
  5. * 接口:是抽象类上一级的封装存在
  6. *
  7. * 功能:具备开车考试的功能的接口
  8. * 具体的方法:理论,场地,路考
  9. *
  10. * 接口可以理解为是一个思想,具体的实现不用管,由实现这个接口的类来实现
  11. *
  12. * 接口语法:
  13. * 使用interface替代原来的class,其他的步骤与类定义相同
  14. * 1.接口中的方法均为公共访问的抽象方法 - jdk7.0之前,之后有所改动
  15. * 2.接口中无法定义普通的成员属性
  16. *
  17. * 接口其实是一个特殊的类,在经过jvm编译之后,还是会生成一个.class文件
  18. */
  19. package Test13_Demo.Demo04;/*
  20. @create 2020--12--01--10:37
  21. */
  22. public interface Driverable {
  23. //定义成员属性 - 在这里声明的是一个常量
  24. //隐藏了public static关键词
  25. //public static String name = "哪吒";
  26. //定义抽象方法
  27. public abstract void TheoryTest();
  28. public abstract void FieldDriver();
  29. public abstract void RoadDriver();
  30. }

子类 - 司机:

  1. /**
  2. *
  3. * 司机类 - 子类
  4. *
  5. * 是员工 - 继承employee - extends
  6. * 需要会开车 - 实现会开车的接口 - implements
  7. */
  8. package Test13_Demo.Demo04;/*
  9. @create 2020--12--01--11:08
  10. */
  11. public class Driver extends Employee implements Driverable {
  12. //接口中的方法
  13. @Override
  14. public void TheoryTest() {
  15. System.out.println("理论考试100分");
  16. }
  17. @Override
  18. public void FieldDriver() {
  19. System.out.println("会倒车入库,会侧方位停车");
  20. System.out.println("s弯,上坡起步,直角转弯");
  21. }
  22. @Override
  23. public void RoadDriver() {
  24. System.out.println("百米加减档");
  25. }
  26. //员工类中的方法
  27. @Override
  28. public void work() {
  29. System.out.println("上下班接送领导,白天接送客人");
  30. }
  31. }

子类 - 经理:

  1. /**
  2. *
  3. * 经理类
  4. * 要会开车
  5. *
  6. */
  7. package Test13_Demo.Demo04;/*
  8. @create 2020--12--01--11:14
  9. */
  10. import javafx.scene.input.Mnemonic;
  11. public class Manager extends Employee implements Driverable {
  12. //接口中的方法
  13. @Override
  14. public void TheoryTest() {
  15. System.out.println("理论考试100分");
  16. }
  17. @Override
  18. public void FieldDriver() {
  19. System.out.println("会倒车入库,会侧方位停车");
  20. System.out.println("s弯,上坡起步,直角转弯");
  21. }
  22. @Override
  23. public void RoadDriver() {
  24. System.out.println("百米加减档");
  25. }
  26. //员工类中的方法
  27. @Override
  28. public void work() {
  29. System.out.println("管理餐厅的人员以及设备");
  30. }
  31. public Manager() {
  32. }
  33. //调用父类的有参构造
  34. public Manager(String name) {
  35. super(name);
  36. }
  37. }

子类 - 服务员:

  1. /**
  2. *
  3. * 定义一个普通类去实现父类(抽象类)中的所有的抽象方法!
  4. */
  5. package Test13_Demo.Demo04;/*
  6. @create 2020--12--01--10:22
  7. */
  8. import Test13_Demo.Demo02.Employee;
  9. public class Waiter extends Employee{
  10. @Override
  11. public void work() {
  12. System.out.println("接客,上菜,结账");
  13. }
  14. public Waiter() {
  15. }
  16. /**
  17. *
  18. * 子类的构造方法可以调用父类的构造方法
  19. * 这里,一个参数的子类构造,调用了父类的一个参数的构造,,为父类中的成员赋值
  20. * 但是最终还是子类对象自己使用了这个成员变量
  21. * @param name
  22. */
  23. //子类的有参构造
  24. public Waiter(String name) {
  25. super(name); //调用的父类(抽象类)中的有参构造方法
  26. }
  27. }

测试类:

  1. /**
  2. *
  3. * 接口定义的是规则:
  4. * 使用接口:就是实现接口、实现接口的关键字implements,重写方法
  5. *
  6. */
  7. package Test13_Demo.Demo04;/*
  8. @create 2020--12--01--11:17
  9. */
  10. public class InterfaceDemo {
  11. public static void main(String[] args) {
  12. //创建经理
  13. Manager manager = new Manager("Jack");
  14. //接口中的方法
  15. manager.TheoryTest();
  16. manager.FieldDriver();
  17. manager.RoadDriver();
  18. //抽象类中的方法
  19. manager.work();
  20. //创建司机
  21. Driver driver = new Driver();
  22. //接口中的方法
  23. driver.TheoryTest();
  24. driver.FieldDriver();
  25. //抽象类中的方法
  26. driver.work();
  27. //服务员没有实现接口,所以不能调用接口中的方法
  28. Waiter waiter = new Waiter();
  29. waiter.work();
  30. }
  31. }