接口
1.接口
- 接口也是一种引用数据类型,编译后生成.class文件
- 接口是完全抽象的(抽象类是半抽象),接口是特殊的抽象类
- 接口的语法:
-
public interface A { }
- 接口可以多继承
-
interface C extends A,B { }
- 接口中只能有常量和抽象方法,而且所有元素都是public修饰的
-
interface A { public static final int num; public abstract int sum(int a,int b); }
-
由于只能有常量和抽象方法,public static final 和 public abstract可以省略,运行时自动加上
-
interface A { int num; int sum(int a,int b); }
-
- 弥补了Java中类只能单继承的缺点
2.接口和类的区别
- 接口是用来定义行为的
- 如果许多类都有一种共同的行为,我们可以把这种行为抽象成一个接口
- 比如人,鱼,潜水艇都会游泳,我们可以定义一个接口叫游泳,让这三个类来实现
- 类会有“ is a ”的关系
- 类是一种共同特征的抽象
- 某一类物体有相同的特征,就可以把它们抽象成一个类
- 三阶魔方,四阶魔方,五阶魔方,都是魔方,可以抽象成魔方类
- 某一类物体有相同的特征,就可以把它们抽象成一个类
3.接口的基础语法
- 类和类之间叫继承,接口和接口之间叫实现(与继承类似)
- 继承用extends关键字
- 实现用implements关键字
- 当一个非抽象类实现接口的时候,必须将接口中所有的方法实现(覆盖)
- 由于接口中的方法都是public修饰,而且覆盖时权限不能变低,可以更高,所以方法覆盖时,也都要public修饰
4.接口的转型
interface A{}
interface B{}
interface C extends A,B{}
public class Test()
{
public static void main(String[] args)
{
A a=new C();
B b=(B)a;//A类引用转型为B类引用,a,b都可以指向C类,a,b之间可以没有继承关系
}
}
引用的强制类型转换本质是改变引用的类型,实例对象已经生成,不会再改变
只要引用类型改变以后,允许指向该对象,就可以转换(继承中的转型也如此)
5.extends和implements同时出现
1.语法
class A extends B implements C{}
extends 在前implements在后
class Animal{}
interface Flyable
{
void fly();
}
class cat extends Animal implements Flyable
{
public void fly()
{
System.out.println("我是一只飞猫");
}
}
public class Test
{
public static void main(String[] args)
{
Flyable f=new Cat;//父类指向子类,向上转型
f.fly();//调用Cat类的方法输出我是一只飞猫(多态)
}
}
实现在猫身上安装翅膀的功能(可插拔),面向接口编程,提高程序的扩展性
6.接口在开发中的应用
接口在开发中的应用类似于多态在开发中的应用
- 面向接口编程,提高扩展性,可插拔
7.行为的多态
行为的多态(接口的转型)
- 行为的多态类似于父类子类间的转型
-
定义一个接口Swimmer,Human类实现该接口
-
public interface Swimmer { void swim(); } class Human implements Swimmer { String name; Human(String name) { this.name=name; } public void swim() { System.out.println(name+"在游泳"); } }
-
-
Shark类实现接口Swimmer
-
Swimmer s=new Human();//Swimmer相当于Human的父类 Human h=(Human)s;//向下转型 Shark sh=(Shark)s;//报错,实际生成的对象是Human类,跟Shark无关,Shark的引用不能指向Human
-