Day36--接口
Day36--接口
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有!
接口:只有规范!自己无法写方法!专业的约束!约束与实现分离
接口本身只是一个契约,规定了实现它的类必须要做什么(实现接口中的方法)
OO 的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如 C++、Java、C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。
声明接口的关键字:interface
我们先看几个不同的标识:
A是类,是蓝色的圆,中间一个C
Action是抽象类,虚线勾勒的圆,里面C
UserService是接口,绿色I
如何创建接口:
新建类----将class改为interface
建立UserService的类
示例:
建立UserService的类,并且创建public abstract void run();的方法
接口里面的所有定义其实都是抽象的,默认是Public abstract
package com.liu.oop.demo09;
//接口里面的所有定义其实都是抽象的,默认是Public abstract
public interface UserService {
public abstract void run();
}
public abstract是灰色的,可以不用写
易错:接口里面的都是抽象的方法,方法不能有主体!!!!!!
package com.liu.oop.demo09;
//接口里面的所有定义其实都是抽象的,默认是Public abstract
public interface UserService {
void run(){}//报错
}
接口都需要有实现类
实现类接口的类,就需要重写接口的方法
建立UserServiceImpl的实现类
package com.liu.oop.demo09;
//接口里面的所有定义其实都是抽象的,默认是Public abstract
public interface UserService {
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
package com.liu.oop.demo09;
//类 implements 接口
public class UserServiceImpl implements UserService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
}
类 implements 接口
可以利用interface实现多继承,继承多个接口
比如,我们再创建一个接口TimeService,接口里面有void timer();的方法
package com.liu.oop.demo09;
public interface TimeService {
void timer();//计时器
}
想让UserServiceImpl也使用这个接口,就要添加上
package com.liu.oop.demo09;
//类 implements 接口
public class UserServiceImpl implements UserService,TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
要注意的是,接口只是对方法的定义
在接口里面,所有的属性默认是静态常量 public static final
例如:创建属性public static final int age=99;
public static final int age=99;
默认的省略,只写
int age=99;
接口不能初始化,但可以通过实现接口的类来使用接口。例如,创建一个实现Animal
接口的Cat
类:
class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("喵喵!");
}
}
-
然后可以在其他代码中使用这些实现类:
public class Main { public static void main(String[] args) { Animal cat = new Cat(); cat.makeSound(); } }
- 在这里,
Animal
接口本身没有被初始化,而是通过Cat
类(Animal
接口的实现类)的实例化来使用接口中定义的方法。
- 在这里,
总结:
接口
1.约束
2.定义一些方法,让不同的人实现 10个员工,用同一个接口,完成同一个任务,可能有10种方法
3.方法默认Public abstract
4.常量默认public static final
5.接口不能被实例化
6.implements可以实现多个接口
7.实现类必须重写接口中的方法