标签:
1、实现接口
1 /* 2 * 接口: 3 * 使用关键字interface来定义 4 * 接口体中包含常量的声明(没有变量)和抽象方法两部分。接口体中只有抽象方法,没有普通方法,而且接 5 * 口体中所有的常量的访问权限一定都是public,而且是static常量(允许省略public、final和static修饰符) 6 * ,所有的抽象方法的访问权限一定都是public(允许省略public abstract修饰符) 7 * 如: 8 * interface Printable{ 9 * public final static int MAX = 100; //等价写法:int MAX = 100; 10 * public abstract void add(); //等价写法:void add(); 11 * public abstract float sum(float x,float y)//等价写法:float sum(float x, float y); 12 * } 13 * 注意:如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法 14 * 如果一个类声明实现一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类,也就是说抽象 15 * 类既可以重写接口中的方法也可以直接拥有接口中的方法 16 * 接口可以用接口名访问接口中的变量,但是如果一个类实现了接口,那么该类可以直接在类体中使用该接口中的 17 * 常量。 18 */ 19 interface Computable 20 { 21 int MAX = 46; 22 int f(int x); 23 } 24 25 class China implements Computable 26 { 27 int number; 28 public int f(int x) 29 { 30 int sum = 0; 31 for(int i=1; i<x; i++) 32 sum = sum+i; 33 return sum; 34 } 35 } 36 37 class Japan implements Computable 38 { 39 int number; 40 public int f(int x) 41 { 42 return MAX+x; 43 } 44 } 45 46 public class 实现接口 47 { 48 public static void main(String[] args) 49 { 50 China zhang; 51 Japan henlu; 52 zhang = new China(); 53 henlu = new Japan(); 54 zhang.number = 32+Computable.MAX; 55 henlu.number = 14+Computable.MAX; 56 System.out.println("zhang的学号"+zhang.number+",zhang求和结果"+zhang.f(100)); 57 System.out.println("henlu的学号"+zhang.number+",henlu求和结果"+henlu.f(100)); 58 System.out.println("Hello World!"); 59 } 60 }
2、理解接口
1 abstract class MotorVehicles 2 { 3 abstract void brake(); 4 } 5 6 interface MoneyFare 7 { 8 void charge(); 9 } 10 11 interface ControlTemperature 12 { 13 void controlAirTemperature(); 14 } 15 16 class Bus extends MotorVehicles implements MoneyFare 17 { 18 void brake() 19 { 20 System.out.println("公共汽车使用撀式刹车技术"); 21 } 22 public void charge() 23 { 24 System.out.println("公共汽车:一元/张,不计算公里数"); 25 } 26 } 27 28 class Taxi extends MotorVehicles implements MoneyFare,ControlTemperature 29 { 30 void brake() 31 { 32 System.out.println("出租车使用盘式刹车技术"); 33 } 34 public void charge() 35 { 36 System.out.println("出租车:2元/公里,起价3公里"); 37 } 38 public void controlAirTemperature() 39 { 40 System.out.println("出租车安装了Hair空调"); 41 } 42 } 43 44 class Cinema implements MoneyFare,ControlTemperature 45 { 46 public void charge() 47 { 48 System.out.println("电影院:门票,十元/张"); 49 } 50 public void controlAirTemperature() 51 { 52 System.out.println("电影院安装了中央空调"); 53 } 54 } 55 56 public class 理解接口 57 { 58 public static void main(String[] args) 59 { 60 Bus bus101 = new Bus(); 61 Taxi blueTaxi = new Taxi(); 62 Cinema redStarCinema = new Cinema(); 63 bus101.brake(); 64 bus101.charge(); 65 blueTaxi.brake(); 66 blueTaxi.charge(); 67 blueTaxi.controlAirTemperature(); 68 redStarCinema.charge(); 69 redStarCinema.controlAirTemperature(); 70 System.out.println("Hello World!"); 71 } 72 }
3、接口回调
1 /* 2 * 接口属于引用型变量,接口变量中可以存放实现该接口的类的实例的引用,即存放对象的引用 3 * 在Java语言中接口回调是指:可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该 4 * 接口变量就可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对 5 * 象调用这个方法 6 * 注意:接口无法调用类中的其他的非接口方法。 7 */ 8 interface ShowMessage 9 { 10 void 显示商标(String s); 11 } 12 13 class TV implements ShowMessage 14 { 15 public void 显示商标(String s) 16 { 17 System.out.println(s); 18 } 19 } 20 21 class PC implements ShowMessage 22 { 23 public void 显示商标(String s) 24 { 25 System.out.println(s); 26 } 27 } 28 29 public class 接口回调 30 { 31 public static void main(String[] args) 32 { 33 ShowMessage sm; //声明接口变量 34 sm = new TV(); //接口变量中存放对象的引用 35 sm.显示商标("长城牌电视机"); //接口回调 36 sm = new PC(); //接口变量中存放对象的引用 37 sm.显示商标(联想奔月5008pc机); //接口回调 38 System.out.println("Hello World!"); 39 } 40 }
4、接口与多态
1 interface CompurerAverage 2 { 3 public double average(double a,double b); 4 } 5 6 class A implements CompurerAverage 7 { 8 public double average(double a, double b) 9 { 10 double aver = 0; 11 aver = (a+b)/2; 12 return aver; 13 } 14 } 15 16 class B implements CompurerAverage 17 { 18 public double average(double a, double b) 19 { 20 double aver = 0; 21 aver = Math.sqrt(a*b); 22 return aver; 23 } 24 } 25 26 public class 接口与多态 27 { 28 public static void main(String[] args) 29 { 30 CompurerAverage computer; 31 double a = 11.23; 32 double b = 22.78; 33 computer = new A(); 34 double result = computer.average(a, b); 35 System.out.println("%5.2f和%5.2f的算术平均值:%5.2f\n"+a+", "+b+", "+result); 36 computer = new B(); 37 result = computer.average(a, b); 38 System.out.println("%5.2f和%5.2f的几何平均值:%5.2f\n"+a+", "+b+", "+result); 39 System.out.println("Hello World!"); 40 } 41 }
5、例子
1 /* 2 * 接口和abstract类的比较如下: 3 * 1、abstract类和接口都可以有abstract方法 4 * 2、接口中只可以有常量,不能有变量;而abstract类中既可以有常量也可以有变量 5 * 3、abstract类中也可以有非abstract方法,接口不可以 6 */ 7 8 interface Advertisement 9 { 10 public void showAdvertisement(); 11 public String getCorpName(); 12 } 13 14 class AdvertisementBoard 15 { 16 public void show(Advertisement adver) 17 { 18 System.out.println(adver.getCorpName()+"的广告词如下:"); 19 adver.showAdvertisement(); 20 } 21 } 22 23 class WhiteCloudCorp implements Advertisement 24 { 25 public void showAdvertisement() 26 { 27 System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@"); 28 System.out.println("飞机中的战斗机,哎yes!"); 29 System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@\n"); 30 } 31 public String getCorpName() 32 { 33 return "白云有限公司"; 34 } 35 } 36 37 class BlackLandCorp implements Advertisement 38 { 39 public void showAdvertisement() 40 { 41 System.out.println("********************"); 42 System.out.println("劳动是爹\n土地是妈"); 43 System.out.println("********************\n"); 44 } 45 public String getCorpName() 46 { 47 return "黑土集团"; 48 } 49 } 50 51 public class 设计广告牌 52 { 53 public static void main(String[] args) 54 { 55 AdvertisementBoard board = new AdvertisementBoard(); 56 board.show(new BlackLandCorp()); 57 board.show(new WhiteCloudCorp()); 58 System.out.println("Hello World!"); 59 } 60 }
标签:
原文地址:http://www.cnblogs.com/msjgodboy/p/4422565.html