接口
概述
接口提供额外功能
特点
1.接口用interface关键字修饰
格式:interface 接口名{}
2.实现接口用implements关键字修饰
格式:class 类名 implement 接口名{}
3.接口不能实例化
使用多态的形式进行实例化
4.接口的子类
可以是抽象类
也可以是具体类 实现接口中的所有抽象方法
成员特点
成员变量
只能是常量 默认被public static final修饰
构造方法
没有构造方法
成员方法
只能是抽象方法 默认被public abstract修饰
类与类,类与接口,接口与接口的关系
a:类与类:
可以单继承 多层继承
b:类与接口:
可以实现接口
可以单实现 多实现
一个类可以同时继承和实现接口
c:接口与接口:
可以单继承 多继承
继承和接口
子类继承父类就自动继承了父类的成员
子类需要扩展功能时 通过实现接口的方式去扩展
接口是对Java单继承的一种补充
public class JichengJiekou {
public static void main(String[] args) {
LittleDog littleDog = new LittleDog();
littleDog.lookDoor();
littleDog.swim();
}
}
class Dog{
public void lookDoor(){
System.out.println("狗会看门");
}
}
interface Fish{
void swim();
}
class LittleDog extends Dog implements Fish{
@Override
public void swim() {
System.out.println("通过学习 狗可以游泳了");
}
}
抽象和接口
成员区别
抽象类
成员变量:可以是变量 也可以是常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口
成员变量:只可以常量
成员方法:只可以抽象
理念
抽象类 is a 继承
接口 like a 扩展
public class ChouxiangJikou {
public static void main(String[] args) {
LittleDog littleDog = new LittleDog();
littleDog.lookDoor();
littleDog.swim();
}
}
abstract class Dog{
public abstract void lookDoor();
}
interface Fish{
void swim();
}
class LittleDog extends Dog implements Fish{
@Override
public void lookDoor() {
System.out.println("狗会看门");
}
@Override
public void swim() {
System.out.println("通过学习 狗可以游泳了");
}
}
多态和接口
public class DuotaiJikou {
public static void main(String[] args) {
Usb[] usbs = new Usb[2];
usbs[0] = new Phone();
usbs[1] = new Camera();
for (int i = 0; i < usbs.length; i++) {
usbs[i].work();
if (usbs[i] instanceof Phone){
((Phone)usbs[i]).call();
}
}
}
}
interface Usb{
void work();
}
class Phone implements Usb{
@Override
public void work() {
System.out.println("手机开始工作");
}
public void call(){
System.out.println("手机可以打电话");
}
}
class Camera implements Usb{
@Override
public void work() {
System.out.println("相机开始工作");
}
}