接口定义
抽象类中的普通方法存在安全以及隐私问题
可通过接口进行对外隐藏全部实现细节
原始定义接口只包含 抽象方法与全局变量
JDK1.8之后,Lambda表达式引入,接口定义得到加强
接口中可定义普通方法或静态方法
但是设计时应以抽象方法和全局变量为主
由于类名与接口名定义要求相同
接口名须在前加I(interface)---->Iname
接口实现的子类用Impl(Implements)为后缀---->nameImpl
interface IGoods{
public static final String MSG = "Get it";
public abstract String getMsg();
} //完整定义
/*
interface IGoods{
String MSG = "Get it";
String getMsg();
} ---简化定义
*/
//!!!接口中方法及变量访问权限默认为public,即覆写时也只能使用public
interface IChannel{
public abstract boolean connect();
}
class GoodsImpl implements IGoods,IChannel{
@Override
public String getMsg() {
if (this.connect()) {
return "It's something wrong with U";
} else
return "It's OKkkkk";
}
@Override
public boolean connect(){
System.out.println("Connect Over");
return true;
}
}
接口使用原则:
接口需要被子类实现(implements)且一个子类可实现多个父接口(“多继承”)
子类(非抽象类)需要覆写接口中的全部抽象方法
接口对象,可通过利用子类的向上转型实现实例化
Goods msga = new GoodsImpl();
IChannel msgb = (IChannel) msga;
System.out.println(msgb.connect());
注意事项:
由于接口将Java的类的单继承限制拓宽,则可以进行两个不同接口的关联及“转换”
通过接口的共同实例子类
接口不可继承其他类
– Interface不是Object的子类
– Interface可被Object接收
– Object类对象可接收所有数据类型
(包含基本数据类型、类对象、接口对象、数组)
IGoods iGoods = new GoodsImpl();
Object object = iGoods;
IChannel channel = (IChannel) object;
System.out.println(channel.connect());
接口描述的是公共定义标准,则接口之中所有抽象方法访问权限均为public
接口继承类可为抽象类,可继承多个父接口
普通类仅能继承一个父类 且 需要先继承再实现
!!!
接口中的抽象方法可省略abstract,但抽象类中不可省略
虽然接口无法继承父类,但是接口可通过extends继承若干父接口(接口的多继承)
interface Iserver extends IChannel,IGoods{}
其实例子类需将其所继承的父类的所有方法进行覆写