概述: 有时候需要从几个类中派生出一个子类,继承他们的所有属性和方法.但是,java不支持多重继承.于是就引入接口,解决这样的问题.
有时候必须从几个类中抽取一些共同的行为特征,而他们之间又没有is-a 的关系,仅仅是具有相同的行为特征.如 ; MP3 手机和数码相机等等都支持USB连接.
接口使用;
1.接口使用interface 来定义
2.Java中,接口和类是并列的两个结构
3.如何定义接口.定义接口中的成员.(接口中主要只有全局变量和抽象方法.无法实列化.)
3.1 JDK7及以前;只能定义全局常量和抽象方法(大学主要谈论此版本)
> 全局常量; public static final 的 //书写时可以省略
> 抽象方法; public abstract 的
3.2 JDK8以后; 除了定义全局常量和抽象方法之外,还可以定义静态方法,默认方法 .
4.接口中不能定义构造器.接口就不能实例化..
5.java开发中,接口都是通过类去实现(implements).
如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实列化..
如果实现类没有覆盖接口三中所有抽象方法,则此实现类认为一个抽象类.
接口中的东西都可以通过接口名调用
package com.helloworld.demo2;
public class InterfaceTest {
public static void main(String[] args) {
System.out.println(Flyable.Max_Speed);
Plan plan = new Plan();
plan.fly();
}
}
//接口
interface Flyable{
//全局常量也可以省略写; int Max_Speed=7900;
public static final int Max_Speed=7900;
public static final int Min_Speed=1;
//抽象方法; 也可以省略写; void fly();
public abstract void fly();
void stop();
}
class Plan implements Flyable{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("通过迎请起飞");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("停止");
}
class Kite implements Flyable{
@Override
public void fly() {
// TODO Auto-generated method stub
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
}
}
接口与接口之间是可以多继承的.
面试题: 抽象类与接口有哪里异同?
接口与抽象类的相同点
被实例化。
接口的实现类或者抽象类的子类都是实现了接口或者抽象类中的方法后才能被实例化。
接口与抽象类的不同点
接口只有定义,方法不能在接口中实现,只有实现接口类才能实现接口中定义的方法,而抽象类可以定义与实现,方法也是可以在抽象类中被实现。
接口需要关键字implement来实现,但是抽象类只能被继承(用extend)。一个类可以实现多个接口,但是一个类只能继承一个抽象类,因此实现多个接口间接的达到多重继承。
接口强调特定功能的实现,设计理念是 has -a 关系,而抽象类强调is -a。
接口中定义的成员变量默认public static final 。必须赋值,抽象类中可以定义自己的数据成员变量,也可以有非抽象的成员方法。这些成员变量可以在子类重新新定义,也可以重新赋值。
接口运用比较常用,便于日后的维护 或者添加删除。而抽象类更倾向于充当公共的角色,不适合日后的对里面代码的修改。
-
Java类可以实现多个接口,----> 弥补了Java单继承性的局限性.
格式;class A extends 父类 implement c ,d,e…//接口
interface Flyable{
//全局常量
public static final int Max_Speed=7900;
public static final int Min_Speed=1;
//抽象方法
public abstract void fly();
void stop();
}
interface Attackable{
public static final int max=100;
public void attack();
}
// 一个类可以实现多个接口
class Bullet extends AtomicBoolean implements Flyable,Appendable{
@Override
public Appendable append(CharSequence csq) throws IOException {
// TODO Auto-generated method stub
return null;
}
@Override
public Appendable append(CharSequence csq, int start, int end) throws IOException {
// TODO Auto-generated method stub
return null;
}
@Override
public Appendable append(char c) throws IOException {
// TODO Auto-generated method stub
return null;
}
@Override
public void fly() {
// TODO Auto-generated method stub
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
}