Day6_接口与实现

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 }
时间: 2024-08-30 10:27:07

Day6_接口与实现的相关文章

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

阅读目录: 1.开篇介绍 2.扩展Linq to Object (应用框架具有查询功能) 2.1.通过添加IEnumerable<T>对象的扩展方法 2.2.通过继承IEnumerable<T>接口 2.3.详细的对象结构图 3.实现IQueryable<T> .IQueryProvider接口 3.1.延迟加载IEnumertor<T>对象(提高系统性能) 3.2.扩展方法的扩展对象之奥秘(this IQueryable<TSource> so

Python:hashlib加密模块,flask模块写登录接口

hashlib模块 主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式 import  hashlib m = hashlib.md5()   #用md5加密的方式(md5加密后无法解密),创建一个md5的对象 m.update(b"Hello")  #b代表二进制字节bytes,把字符串hello转成字节,然后加密:用b给一个变量转换

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

微信jssdk批量添加卡券接口

1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.08619731531288366&token=&lang=zh_CN#wxkq3 : 2.卡券扩展字段cardExt说明:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.08619731531288366&t

微信公众号调用接口返回码

返回码 说明 -1 系统繁忙,此时请开发者稍候再试 0 请求成功 40001 获取access_token时AppSecret错误,或者access_token无效.请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口 40002 不合法的凭证类型 40003 不合法的OpenID,请开发者确认OpenID(该用户)是否已关注公众号,或是否是其他公众号的OpenID 40004 不合法的媒体文件类型 40005 不合法的文件类型 40006 不合法的文件大小 4000

MVC下微信企业号网页应用开发调用JSSDK接口不成功问题

在MVC下进行企业微信里的网页应用开发,前台页面中为了调用图像接口,使用了JSSDK.按照官方文档进行了正确配置. 现象:WEB开发工具调试一切正常,但从手机企业微信应用进入页面后接口调用无效(这个页面是从一级页面链接过来的),开了调试模式后,显示config:ok.说明配置无误.经过反复检查,终于发现问题所在. 原因:在一级页面(http://xx.xxx.xxx/main/index)中的链接是使用htmlhelper来写的,即@Html.ActionLink("测试接口",&qu

关于工作中微信分享接口的bug

调用config 接口1的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息.以下为常见错误及解决方法: invalid url domain当前页面所在域名与使用的corpid没有绑定(可在该企业号的应用可信域名中配置域名). invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认c