第28集 接口的基本语法
接口的使用的方法真正体现了面对对象的精髓, 接口绝对是最重要的。
主要内容。
1.什么是接口。
2.接口的基本语法(就是比较纯的抽象类。)
1).使用interface定义。
2).接口当中的方法都是抽象方法。
3).接口当中的方法都是public权限。
//***********************************************************************//
====>>>> 定义了接口,就是定义了调用对象的标准.很重要. <<<<<===
//************************************************************************//
1.实现接口使用implements关键字。
2.一个类可以实现多个接口。(与一个类只能继承一个父类不同)
3.一个接口可以继承多个接口。
接口的子类负责来复写父类的抽象方法的过程就叫实现接口。所以,实现是一种特殊的继承。
程序示例1:接口的定义及实现
第29课 接口的应用
本集主要内容
1.为什么要使用接口。
2.工厂方法模式。
通过一个例子来说明接口的意义,下面是一个打印机的示例:
一个printer接口, 一个HPPrinter类, 一个CanonPrinter类.还有一个Test类.
上面的程序还有很多问题,在Test 类,生成Printer对象的代码重复出现.
下面用 简单静态工厂方法模式.
Printer
| | PrinterFactory
HPPrinter CanonPrinter
再改动一下上面的代码.
增加一个PrinterFactory类
Printer 是一个接口,HPPrinter CanonPrinter 都实现了这个接口。生成这两个类的对象的方法 不是直接生成,而是封装在了PrinterFactory类的getPrint() 当中. 这样做的好处是 使用者必不需要知道 Printer 有哪些子类,他们不需要去 new具体的哪个类的对象,只要调用PrinterFactory类的getPrint() 的方法就能得到一个Printer对象。开发者保留了对子类 删减的权力。
接口的使用的方法真正体现了面对对象的精髓, 接口绝对是最重要的。
主要内容。
1.什么是接口。
2.接口的基本语法(就是比较纯的抽象类。)
1).使用interface定义。
2).接口当中的方法都是抽象方法。
3).接口当中的方法都是public权限。
//***********************************************************************//
====>>>> 定义了接口,就是定义了调用对象的标准.很重要. <<<<<===
//************************************************************************//
1.实现接口使用implements关键字。
2.一个类可以实现多个接口。(与一个类只能继承一个父类不同)
3.一个接口可以继承多个接口。
接口的子类负责来复写父类的抽象方法的过程就叫实现接口。所以,实现是一种特殊的继承。
程序示例1:接口的定义及实现
//***************************定义USB接口***************************************//
interface USB{
public void read();
public void write();
}
//***************************实现USB接口***************************************//
class USBPhone implements USB{
public void read(){
System.out.println("USBPhone read");
}
public void write(){
System.out.println("USBPhone write");
}
}
//***************************测试***************************************//
class Test{
public static void main(String args[]){
USBPhone usbPhone = new USBPhone();
USB usb = usbPhone;
usb.read();
usb.write();
}
}
程序示例2:一个类实现多个接口
interface WiFi{
public void open();
public void close();
}
//***************************一个类实现两个接口***************************************//
class Phone implements USB,WiFi{
public void read(){
System.out.println("Phone read");
}
public void write(){
System.out.println("Phone write");
}
public void open(){
System.out.println("WiFi open ");
}
public void close(){
System.out.println("WiFi Close");
}
}
//***************************测试2***************************************//
class Test{
public static void main(String args[]){
//USBPhone usbPhone = new USBPhone();
//USB usb = usbPhone;
//usb.read();
//usb.write();
Phone phone = new Phone();
USB usb = phone; //接口也可向上转型的。
usb.read();
usb.write();
WiFi wifi = phone;
wifi.open();
wifi.close();
}
}
程序示例3:一个接口继承多个接口
//***************************接口A***************************************//
interface A{
public void funA();
}
//***************************接口B***************************************//
interface B{
public void funB();
}
//***************************接口C 继承接口A,接口B***************************************//
interface C extends A,B{
public void funC();
}
接口C中就有了 funA(), funB() , funC() 三个方法。
第29课 接口的应用
本集主要内容
1.为什么要使用接口。
2.工厂方法模式。
通过一个例子来说明接口的意义,下面是一个打印机的示例:
一个printer接口, 一个HPPrinter类, 一个CanonPrinter类.还有一个Test类.
//*****************************Printer 接口*******************************//
interface Printer{
public void open();
public void close();
public void print(String s);
}
//*****************************HPPrinter 类*******************************//
class HPPrinter implements Printer{
public void open(){
System.out.println("HP open");
}
public void close(){
System.out.println("HP close");
}
public void print(String s){
System.out.println("HP print--->"+s );
}
}
//*****************************CanonPrinter 类*******************************//
class CanonPrinter implements Printer{
private void clean(){
System.out.println("Canon Priter clean");
}
public void close(){
this.clean();
System.out.println("Canon close");
}
public void open(){
System.out.println("Canon open");
}
public void print(String s ){
System.out.println("Canon Print--->"+s);
}
}
//*****************************测试*******************************//
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象
//并且向上转型为Printer类型。
//Printer getPrinter(int flag);
Printer printer = null;
int flag = 1;
if(flag == 0){
printer = new HPPrinter();//向上转型
}
else if(flag ==1){
printer = new CanonPrinter();//向上转型
}
printer.open();
printer.print("test");
printer.close();
}
}
使用接口的好处是 这两个打印机的各个方法各不相同,拥有自己的实现方法。
上面的程序还有很多问题,在Test 类,生成Printer对象的代码重复出现.
下面用 简单静态工厂方法模式.
Printer
| | PrinterFactory
HPPrinter CanonPrinter
再改动一下上面的代码.
增加一个PrinterFactory类
/*****************************增加一个PrinterFactory类*********************************************//
class PrinterFactory{
public static Printer getPrinter(int flag){
Printer printer = null;
if(flag == 0){
printer = new HPPrinter();//向上转型
}
else if(flag ==1){
printer = new CanonPrinter();//向上转型
}
else if(flag ==2){
printer = new XXXPrinter();//向上转型
}
return printer;
}
}
//*****************************更改Test*********************************************//
class Test{
public static void main(String args[]){
//根据用户的选择,生成相应的打印机对象
//并且向上转型为Printer类型。
int flag = 2;
Printer printer = PrinterFactory.getPrinter(flag);
printer.open();
printer.print("test");
printer.close();
}
}
//************************再增加打印机.只需要增加一个打印机.如添加XXXPrinter打印机.************//
//XXXPrinter 类
class XXXPrinter implements Printer{
public void open(){
System.out.println("XXX open");
}
public void close(){
System.out.println("XXX close");
}
public void print(String s){
System.out.println("XXX print--->"+s );
}
//**************************只需在PrinterFactory里面添加****************************************//
else if(flag ==2){
printer = new XXXPrinter();//向上转型
}
简单静态工厂方法模式:
Printer 是一个接口,HPPrinter CanonPrinter 都实现了这个接口。生成这两个类的对象的方法 不是直接生成,而是封装在了PrinterFactory类的getPrint() 当中. 这样做的好处是 使用者必不需要知道 Printer 有哪些子类,他们不需要去 new具体的哪个类的对象,只要调用PrinterFactory类的getPrint() 的方法就能得到一个Printer对象。开发者保留了对子类 删减的权力。