Java4Android (第28~29集) 接口

第28集 接口的基本语法
接口的使用的方法真正体现了面对对象的精髓,  接口绝对是最重要的。
  主要内容。
  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对象。开发者保留了对子类 删减的权力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值