Java基础—接口
接口的基本定义
在抽象类依然可能有普通方法,二普通方法可能会涉及到一些安全或隐私的操作问题,在开发过程中,如果想对外部隐藏全部的实现细节,就通过接口来进行描述。接口可以理解为一个纯粹的抽象类。接口可以定义
用关键字interface定义,j接口名称前有一个大写的I
接口必须被子类实现,子类可以实现多个父接口
子类一定要覆写接口之中的全部抽象方法,没有覆写方法报错
接口可以利用子类对象的向上转型进行实例化
子类继承接口的关键字:implements
利用接口可以实现多继承的目的
static定义的可以实例化,修改
Object是所有类的父类,接口是不允许继承父类的,但接口可以通过Object接收。
10、Object类可以结构所有数据类型,包括基本数据类型、类对象、接口对象、数组
1接口之中的所有的抽象方法都是公共的,public写不写都是一样的。覆写的时候只能是public
1接口中的方法的abstract可以省略,抽象类不可以
1接口可以继承接口:extends,可以继承多个。但同样要覆写全部的方法
1在实际的开发之中,接口的使用往往有三种形式:
进行标准设置表示一种操作的能力暴露远程方法视:一般在RPC分布式开发中使用。
接口定义加强
接口中的普通方法必须加上default的声明
static方法可以通过接口直接调用
通过抽象类过渡
工厂设计模式
对接口而言,子类可以通过对象的向上转型来获取接口的实例化对象,简单的实现
interface IFood{//定义一个食物标准
public void eat();//吃
}
class Bread implements IFood{//定义一种食物
public void eat(){
System.out.println('吃面包');
}
}
public class Demo{
public static void main(String[] args) {
IFood food=new Bread();//向上转型进行接口对象实例化
food.eat();
}
}
代码错误
public class Demo{
public static void main(String[] args) {
IFood food=Factory.getInstance('milk');//字符串与文字的比较,报错
food.eat();
}
}
完整代码
interface IFood{//定义一个食物标准
public void eat();//吃
}
class Bread implements IFood{//定义一种食物
public void eat(){
System.out.println('吃面包');
}
}
class Milk implements IFood{
public void eat(){
System.out.println('喝牛奶');
}
}
class Factory{
public static IFood getInstance(String className){
if ('bread'.equals(className)) {
return new Bread();
}
else if ('milk'.equals(className)) {
return new Milk();
}
else
return null;
}
}
public class Demo{
public static void main(String args[]) {
IFood food=Factory.getInstance(args[0]);
food.eat();
}
}
结果
结论:良好的设计应该避免耦合
代理设计模式
```
}classEatRealimplementsIEat{publicvoidget(){Systeout.println(“得到一份食物,开始品尝”);}}classEatProxyimplementsIEat{//服务代理privateIEateat;//为吃二服务publicEatProxy(IEateat){//一定要有一个代理项this.eat=eat;}publicvoidget(){this.prepare();this.eat.get();this.clear();}publicvoidprepare(){//准备过程Systeout.println(“购买食材”);Systeout.println(“小心处理食材”);
}
public void clear(){
System.out.println('3、收拾碗筷');
}
}publicclassDemo{publicstaticvoidmain(String[]args){IEateat=newEatProxy(newEatReal());eat.get();
}
}```
抽象类与接口的区别
定义 | abstarct class 抽象类名称{} | interface 接口类名称 {} |
组成 | (构造、普通、静态)方法、全局常量、成员 | 抽象方法、全局常量、普通方法、static方法 |
权限 | 可以使用各种权限定义 | 只能够使用public |
子类使用 | 子类通过extends关键字可以继承一个抽象类 | 子类使用implements可以实现多个接口 |
两者关系 | 抽象类可以实现若干个接口 | 接口不允许继承抽象类,但是允许继承多个父接口 |
使用 | 1、抽象类和接口必须定义子类 | 2、子类一定要覆写抽象类或接口中的全部抽象方法 3、通过子类的向上转型实现抽象类或接口的对象实例化 |
接口可以避免抽象类的单继承局限。
文章为作者独立观点,不代表股票交易接口观点