接口定义的是规则:
使用接口:就是实现接口、实现接口的关键字 implements,重写方法
使用接口的时候需要注意:
1.接口是没有静态代码块或者构造方法的
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
格式:
public class MyInterfaceImpl implements MyInterfaceA MyInterfaceB{
//覆盖重写所有抽象方法
}
父类(抽象类):
/**** 抽象类 - 父类* 可以设置构造函数**/package Test13_Demo.Demo04;/*@create 2020--12--01--10:13*/public abstract class Employee {//属性private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}/*** 抽象类中的构造方法不能被程序直接调用,因为该类是一个抽象类,不能实例化对象* 但是在创建子类(普通类)的时候,子类构造函数会默认调用父类的无参构造函数,为了子类对象的父类存储空间赋值*///无参构造public Employee() {super();}//有参构造public Employee(String name) {super();this.name = name;}//定义成员方法 - 抽象方法public abstract void work();//抽象类中可以保存普通方法public void test() {System.out.println("我是一个普通方法");}}
接口:
/**** 引入接口:** 接口:是抽象类上一级的封装存在** 功能:具备开车考试的功能的接口* 具体的方法:理论,场地,路考** 接口可以理解为是一个思想,具体的实现不用管,由实现这个接口的类来实现** 接口语法:* 使用interface替代原来的class,其他的步骤与类定义相同* 1.接口中的方法均为公共访问的抽象方法 - jdk7.0之前,之后有所改动* 2.接口中无法定义普通的成员属性** 接口其实是一个特殊的类,在经过jvm编译之后,还是会生成一个.class文件*/package Test13_Demo.Demo04;/*@create 2020--12--01--10:37*/public interface Driverable {//定义成员属性 - 在这里声明的是一个常量//隐藏了public static关键词//public static String name = "哪吒";//定义抽象方法public abstract void TheoryTest();public abstract void FieldDriver();public abstract void RoadDriver();}
子类 - 司机:
/**** 司机类 - 子类** 是员工 - 继承employee - extends* 需要会开车 - 实现会开车的接口 - implements*/package Test13_Demo.Demo04;/*@create 2020--12--01--11:08*/public class Driver extends Employee implements Driverable {//接口中的方法@Overridepublic void TheoryTest() {System.out.println("理论考试100分");}@Overridepublic void FieldDriver() {System.out.println("会倒车入库,会侧方位停车");System.out.println("s弯,上坡起步,直角转弯");}@Overridepublic void RoadDriver() {System.out.println("百米加减档");}//员工类中的方法@Overridepublic void work() {System.out.println("上下班接送领导,白天接送客人");}}
子类 - 经理:
/**** 经理类* 要会开车**/package Test13_Demo.Demo04;/*@create 2020--12--01--11:14*/import javafx.scene.input.Mnemonic;public class Manager extends Employee implements Driverable {//接口中的方法@Overridepublic void TheoryTest() {System.out.println("理论考试100分");}@Overridepublic void FieldDriver() {System.out.println("会倒车入库,会侧方位停车");System.out.println("s弯,上坡起步,直角转弯");}@Overridepublic void RoadDriver() {System.out.println("百米加减档");}//员工类中的方法@Overridepublic void work() {System.out.println("管理餐厅的人员以及设备");}public Manager() {}//调用父类的有参构造public Manager(String name) {super(name);}}
子类 - 服务员:
/**** 定义一个普通类去实现父类(抽象类)中的所有的抽象方法!*/package Test13_Demo.Demo04;/*@create 2020--12--01--10:22*/import Test13_Demo.Demo02.Employee;public class Waiter extends Employee{@Overridepublic void work() {System.out.println("接客,上菜,结账");}public Waiter() {}/**** 子类的构造方法可以调用父类的构造方法* 这里,一个参数的子类构造,调用了父类的一个参数的构造,,为父类中的成员赋值* 但是最终还是子类对象自己使用了这个成员变量* @param name*///子类的有参构造public Waiter(String name) {super(name); //调用的父类(抽象类)中的有参构造方法}}
测试类:
/**** 接口定义的是规则:* 使用接口:就是实现接口、实现接口的关键字implements,重写方法**/package Test13_Demo.Demo04;/*@create 2020--12--01--11:17*/public class InterfaceDemo {public static void main(String[] args) {//创建经理Manager manager = new Manager("Jack");//接口中的方法manager.TheoryTest();manager.FieldDriver();manager.RoadDriver();//抽象类中的方法manager.work();//创建司机Driver driver = new Driver();//接口中的方法driver.TheoryTest();driver.FieldDriver();//抽象类中的方法driver.work();//服务员没有实现接口,所以不能调用接口中的方法Waiter waiter = new Waiter();waiter.work();}}
