写给自己的JAVA工程师之路-接口

news/2024/11/30 5:56:41/

1.1 接口的基本概念


接口是一种特殊的类,但是在接口里面的组成与类不同,比类的组成部分简单,主要由抽象方法和全局常量所组成。而接口使用interface关键字定义。
interface A{public static final String MSG="HELLO WORLD";public abstract void print();
}

1)接口一定要定义子类,子类利用implements关键字实现接口,一个子类可以实现多个接口。
2)接口的子类如果不是抽象类,那么必须覆写接口的全部抽象方法。
3)接口的对象利用子类的向上转型进行实例化对象。
4)抽象类可以实现接口,但是接口不能继承抽象类,一个接口却可以使用extends继承多个父接口。
5)虽然接口本身只能够有抽象方法和全局常量,但是内部结构是不受到限制的,那么也就是说一个接口的内部可以继续定义内部类,内部抽象类和内部接口。如果一个内部接口上使用了static定义,那么这个内部接口就属于外部接口。
6)接口中的权限统一为public,一般不会定义全局常量。

实际开发中接口的三个原则:
制定操作标准。
表示一种能力。
将服务器端的远程方法视图提供给客户端。

神奇操作:B和A鸟关系都没有,但是可以转换,是因为X是子类。
interface A{public static final String MSG="HELLO WORLD";public abstract void print();
}
interface B{public abstract void fun();
}
class X implements A,B{@Overridepublic void fun() {System.out.println("我不想说话");}@Overridepublic void print() {System.out.println(MSG);}}
public class InterDemo {public static void main(String[] args) {
//		X x=new X();//实例化子类对象
//		A a=x;//子类对象为父接口实例化
//		B b=x;//子类对象为父接口实例化A a=new X();//子类对象为父接口实例化B b=(B)a;//我也不理解b.fun();}
}

注意:关于接口的组成描述,以下两段代码是完全一样的,大部分情况把abstract省掉,写上public。 


1.2 接口的实际应用



interface USB{public void start();public void stop();
}class Computer{public void plugin(USB usb){usb.start();usb.stop();}
}class Flash implements USB{@Overridepublic void start() {System.out.println("USB开始工作");}@Overridepublic void stop() {System.out.println("USB结束工作");}
}
class KeyBoard implements USB{@Overridepublic void start() {System.out.println("键盘开始工作");}@Overridepublic void stop() {System.out.println("键盘结束工作");}
}
public class InterDemo {public static void main(String[] args) {Computer c=new Computer();c.plugin(new Flash());c.plugin(new KeyBoard());}
}

1.3 工厂设计模式

现在有这样一个代码:
interface Fruit{public void eat();
}class Apple implements Fruit{public void eat(){System.out.println("吃苹果");}
}
public class InterDemo {public static void main(String[] args) {Fruit f=new Apple();}
}

以上代码没有语法错误,但是设计上有缺失。假如现在我们需要增加一个樱桃类,那么我们就需要修改客户端,这样的设计是非常糟糕的。

那么如果要想解决这个问题,可以参考Java的可移植性的实现原理:
不可移植性:程序 → 操作系统
可移植性:程序 → JVM → 操作系统
interface Fruit{public void eat();
}class Apple implements Fruit{public void eat(){System.out.println("吃苹果");}
}
class Cherry implements Fruit{public void eat(){System.out.println("吃樱桃");}
}
class Factory{public static Fruit getIns(String classname){if("apple".equals(classname)){return new Apple();} else if ("cherry".equals(classname)) {return new Cherry();}else {return null;}}
}
public class InterDemo {public static void main(String[] args) {Fruit f=Factory.getIns(" ");}
}

1.4 代理设计模式

所谓的代理结构指的是在接口上的一种应用,一个接口有一个核心的操作主题,但是在整个操作过程中,只依靠核心的操作主题是无法完成所需要功能的,那么需要一个代理的主题。

interface Subject{//核心操作主题public void b();
}
class RealSubject implements Subject{public void b(){System.out.println("进行数据操作");}
}
class ProxySubject implements Subject{private Subject subject;//代理真实主题public ProxySubject(Subject subject){this.subject=subject;}public void a(){System.out.println("数据库连接");}public void b(){this.a();subject.b();this.c();}public void c(){System.out.println("断开连接");}
}
public class InterDemo {public static void main(String[] args) {Subject s=new ProxySubject(new RealSubject());s.b();}
}

1.5 抽象类与接口的区别

接口,抽象类,类,对象



不同点:

1 定义关键字
2 组成
3 权限
4 子类实现
5 关系
6 设计模式



http://www.ppmy.cn/news/234426.html

相关文章

写给自己的JAVA工程师之路-正则表达式

1 认识正则表达式 判断字符串是否由数字组成 最原始实现方式 public class demo {public static void main(String[] args) {String a "123123" ;System.out.println(isNumber(a));}public static boolean isNumber(String str) {char [] ch str.toCharArray();fo…

web开发之路——jQuery(下)

一、小例子——tab菜单 <!DOCTYPE html> <html langen> <head><meta charset"UTF-8"><title></title><!-- line-height:33px; 让标题的内容居中显示 padding:5px; 边距--><style>.tab-box .box-menu{background-c…

小程序制作海报,保存本地

<view stylewidth:100%;> <image stylewidth:100%; src"../../img/china_img.png"></image> </view> <view classCONTECT>欢迎你是神啊深刻的三大杀菌剂啥都会受到大叔大婶帝国时代干</view> <view stylewidth:100%;margin-t…

欢迎使用CSDN-markdown编辑器;手残啊呜发

快捷键-加粗 按按按Ctrl B -斜体 CTRL I-引用 CTRL Q-插入链接 Ctrl L键键键-插入代码 按下按下按下Ctrl K-插入图片 按按按Ctrl G-提升标题 Ctrl H键键键-有序列表 Ctrl O键键键-无序列表 按按按Ctrl U-横线 按按按Ctrl [R-撤销按Ctrl Z键键-重做 按Ctrl Y ##减…

关于感兴趣区域和掩膜的问题!

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/JiaFanChen/article/details/51149338 本文章主要对感兴趣区域ROI的操作&#xff08;对于ROI区域图像叠加&#xff09;说明 在图像处理的领域&#xff0c;我们常常需要去设置…

python笔记:太困了,读取并显示按行业分类的股票数据提提神

先升级pip&#xff0c;要不tushare安装不上&#xff0c;使用Anaconda Prompt执行命令&#xff1a; python -m pip install --upgrade pip 再安装tushare&#xff1a; pip install tushare # -*- coding: utf-8 -*- """ Created on Tue May 7 16:16:17 2019…

Vue基础语法(样式绑定、时间处理器、表单、组件)

样式绑定 一、 class绑定 使用方式&#xff1a;v-bind:class“expression” expression的类型&#xff1a;字符串、数组、对象 二、 style绑定 v-bind:style“expression” expression的类型&#xff1a;字符串、数组、对象 样式绑定.html <!DOCTYPE html> <html&…

wxpython学习记录

写在前面的话 对于wxpython的学习我推荐三个阶段&#xff0c;第一阶段是完全无基础学习阶段&#xff0c;建议使用 UI 软件进行布局&#xff0c;第二阶段是深化阶段&#xff0c;对wxpython有了一定的基础&#xff0c;可以尝试纯代码布局&#xff0c;加深印象&#xff0c;第三阶…