1.接口的定义
接口是功能的集合
接口只描述所应该具有的方法,没有具体的实现
这样将功能的定义和实现分离,优化了程序设计
接口的定义需要使用interface关键字,定义格式:
public interface 接口名{}
注意:
1.接口中的方法均为抽象方法
2.接口中没有普通的成员变量
2.类实现接口
类与接口为实现关系,需要使用implements关键字
class 实现类名 implements 接口名{
重写接口中的抽象方法;
}
在类实现接口之后,该类就会将接口中的抽象方法继承过来,此时该类只需要重新重写这个抽象方法,完成具体的逻辑
3.接口中成员的特点
1.接口中可以定义成员变量,但是有固定的修饰符,public static final。所以接口中的变量也成为常量,其值不能改变。
2.接口中可以定义成员方法,同样有固定的修饰符,public abstract,即接口中的方法均为抽象方法。
3.接口不可以直接创建对象,需要通过实现类来创建对象
4.实现类必须重写接口中所有的抽象方法,这样实现类才能实例化,否则实现类还是一个抽象类
interface Demo { ///定义一个名称为Demo的接口。
public static final int NUM = 3;// NUM的值不能改变
public abstract void show1();
public abstract void show2();
}
//定义子类去覆盖接口中的方法。类与接口之间的关系是 实现。通过 关键字 implements
class DemoImpl implements Demo { //子类实现Demo接口。
//重写接口中的方法。
public void show1(){}
public void show2(){}
}
4.接口的多实现
接口最重要的体现:解决了继承的弊端。将多继承这种机制在java中通过接口的多实现解决了。
interface Fu1
{
void show1();
}
interface Fu2
{
void show2();
}
class Zi implements Fu1,Fu2// 多实现。同时实现多个接口。
{
public void show1(){}
public void show2(){}
}
接口是如何解决继承的弊端呢?
继承的弊端:多继承时,当多个父类具有相同的功能时,子类调用会产生不确定性。
核心原因就是因为继承时方法具有主体,导致当调用功能时,不确定运行的是哪个主体内容。又因为接口中方法没有主体,所以实现类调用并不会产生不确定性。
5.接口的多继承
接口之间的继承同样使用关键字extends。interface Fu1{
void show();
}
interface Fu2{
void show1();
}
interface Fu3{
void show2();
}
interface Zi extends Fu1,Fu2,Fu3{
void show3();
}
在开发中,如果多个接口中存在相同方法,这时,若有个类实现这些接口,那么就要实现接口中的抽象方法,由于抽象方法没有主体,子类实现后也不会发生调用的不确定性。
6.类继承的同时也可以实现接口
当一个类已经继承另一个类的同时有需要扩展额外功能,这时就需要接口了。class Fu {
public void show(){}
}
interface Inter {
pulbic abstract void show1();
}
class Zi extends Fu implements Inter {
public void show1() {
}
}
接口避免了继承的局限性。父类中定义事物的基本功能。接口中定义事物的扩展功能。
7.接口和抽象类的区别
1.相同点
·都位于继承的顶端,用于被其他类实现或者继承
·都不能直接实例化对象
·都包含抽象方法,其子类都必须覆盖这些方法,否则为抽象类
2.区别
·抽象类部分方法提供实现,避免子类重复实现这些方法,提高代码的复用性;
接口中只能存在抽象方法,不能提供方法的实现;
·一个类只能继承一个父类(抽象类);
一个类可以实现多个接口(弥补了Java的单继承)
·抽象类是这个事物应该具备的内容
接口是这个事物扩展的内容