第9章 接口

1、抽象类:

     包含抽象方法的类叫抽象类,如果一个类包含一个或多个抽象方法(abstract void f();),该类必须被限定为抽象的,否则编译出错。

         1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

         2、抽象方法必须由子类来进行重写。

         3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

         4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

         5、子类中的抽象方法不能与父类的抽象方法同名。

         6、abstract不能与final并列修饰同一个类。

         7、abstract 不能与private、static、final或native并列修饰同一个方法。

2、接口:

         1、一个Interface的所有方法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!

         2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

         3、接口中不存在实现的方法。

         4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

         5、不 能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。

              可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

         6、在实现多接口的时候一定要避免方法名的重复。

3、抽象类与接口的区别:     接口是对动作的抽象,抽象类是对根源的抽象。

         1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

         2、抽象类要被子类继承,接口要被类实现。

         3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

         4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

         5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,

              那么该类也只能为抽象类。

         6、抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。

         7、抽象类里可以没有抽象方法

         8、如果一个类里有抽象方法,那么这个类只能是抽象类

         9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

        10、接口可继承接口,并可多继承接口,但类只能单根继承。

  优先选择类而不是接口,特别是对于公用的实现代码,抽象类有它的优点。抽象类能够保证实现的层次关系,避免代码重复。然而,即使在使用抽象类的场合,也不要忽视通过接口定义行为模型的原则。从实践的角度来看,如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能 够更有效地分离行为与实现,为代码的维护和修改带来方便。

转载于:https://www.cnblogs.com/xiangjianmanbu/p/5825761.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用node-webkit(NW.js)创建桌面程序

以往写windows桌面程序需要用MFC、C#之类的技术,那么如果你只会web开发技术呢?或者说你有一个网站,但是你想把你的网站打包成一个桌面应用程序,该如何做呢? 答案就是用node-webkit这个开源框架,他封装了web…

kindeditor用法简单介绍(转)

1,首先去官网下载http://www.kindsoft.net/ 2,解压之后如图所示: 由于本人做的是用的是JSP,所以ASP,PHP什么的就用不上了,直接把那些去掉然后将整个文件夹扔进Myeclipse,如图: 里面有个报错&am…

SOLIDWORKS——参数化建模

https://www.sohu.com/a/259742200_100042821 知识点:投影曲线、曲面填充、扫描、外观设置 建模步骤 1.先在工具——方程式里输入一个直径的变量A120 。 2.在前视基准面上草绘圆,画一条直径。直径等于变量A。 3.旋转,选择粉色区域。 4.上视…

Androd安全——反编译技术完全解析

0.前言单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能。另外既然别人可以反编译程序,我们当然有理由应该对程序进行一定的保护,因此代码混淆也是我们必须要掌握的一项技术。看完此篇如果对代码混淆也感兴趣&#x…

python——shape 与reshape

转载自:https://blog.csdn.net/u010916338/article/details/84066369 shape()和reshape()都是数组array中的方法 numpy中reshape函数的三种常见相关用法 numpy.arange(n).reshape(a, b) 依次生成n个自然数,并且以a行b列的数组形式显示np.arange(16).reshape(2,…

误删了microsoft visual c++后如何正常运行matlab

误删了microsoft visual c后如何正常运行matlab 本人在卸载visual studio2013的时候,因为这个软件卸载的过程中出现一些问题,误将visual c当成VS的组件一同删除了。但是在打开matlab 时发现出错,matlab打开后会出现下面的界面。 出现这个问题…

iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验

*软件介绍:苹果锁屏通知(iScreenLocker)是一款android上ios风格的锁屏软件。它颠覆安智通知设计,将原来状态栏的通知搬到锁屏界面上来,能够在桌面轻松收发短信,微博,微信等消息。它独有的消息唤醒功能。能使手机从待机界面唤醒而消耗非常少的电量。手指轻…

JSP慕课网阶段用户登录小例子(不用数据库)

getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数。 Web是请求/响应架构的使用,而request和response就是在服务器端生成的相应的两个对象,request能够获取客户端传递的参数及相关的一些信息,而resp…

机器学习python——python基础

目录 1、常用库 2、shape与reshape,dtype 3、range、arange、linspace、logspace 4、数组的计算、切片 5、绘图基本设置 6.三维绘图 1、常用库 numpy、scipy、matplotlib、math 2、shape与reshape,dtype https://blog.csdn.net/qq_45769063/arti…

win10环境下如何给visual studio 2013永久配置opencv3.1.0环境

win10环境下如何给visual studio 2013永久配置opencv3.1.0环境 本人在给visual studio 2013配置opencv 环境下遇到过一些问题,比如配置不成功或者不能永久配置opencv环境。先将自己的配置经验分享于此,希望同道中的好友可以用上。 首先自行下载Visual s…

属性名、变量名与 内部关键字 重名 加

procedure TForm4.btn3Click(Sender: TObject); varMyQj: TQJson;MyPrinter: TPrinter; beginMyQj : TQJson.Create;tryMyPrinter.name : A号打印机;MyPrinter.status : enabled;MyPrinter.&type : yes;MyQj.FromRecord<TPrinter>(MyPrinter);Memo1.Lines.Add(MyQj.A…

机器学习——支持向量机SVM之线性模型

目录 一、没有免费的午餐定理 二、支持向量机SVM&#xff08;support vector machine&#xff09; 1、线性模型和非线性模型 2、如何在线性模型中画出一条直线&#xff08;优化过程——vplink&#xff09; 1&#xff09;多少条&#xff1f; 2&#xff09;如何画出最好的直…

Oauth2.0和1.0区别

1.0的授权分3步, A)客户端到授权服务器请求一个授权令牌(request token&secret) B)引导用户到授权服务器请求授权 C)用访问令牌到授权服务器换取访问令牌(access token&secret) D)用访问令牌去访问得到授权的资源 2.0的用户授权过程有2步&#xff0c; A)引导用户到授权…

spring@PropertySource用法

v测试例子 package com.hjzgg.auth.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annot…

机器学习——支持向量机SVM之非线性模型(低维到高维映射)

目录 一、非线性模型的最优化问题 1、非线性模型最优化模型 2、两个概念 1&#xff09;正则项&#xff08;regularization term&#xff09; 2&#xff09;调参参数 2、高维映射 1&#xff09;定义及作用 2&#xff09;高维映射后的最优化模型 3&#xff09;异或问题&…

html表单中get与post之间的区别

当用户在 HTML 表单 (HTML Form) 中输入信息并提交之后&#xff0c;有两种方法将信息从浏览器传送到 Web 服务器 (Web Server)。 一种方法是通过 URL&#xff0c;另外一种是在 HTTP Request 的 body 中。 前一种方法&#xff0c;我们使用 HTML Form 中的 method "get&quo…

世界坐标系,摄像机坐标系、图像坐标系关系汇总

**摄像机标定&#xff1a;**在计算机视觉研究领域&#xff0c;摄像机标定是一个重要的环节。摄像机标定就是求取摄像机内外参数的过程。 世界坐标系&#xff1a;绝对坐标系&#xff0c;一般的三维场景都由这个坐标系来表示。摄像机可以放置在环境中的任何位置&#xff0c;因此可…

SpringMVC-HelloWorld

2&#xff0e;5、Hello World入门 2.5.1、准备开发环境和运行环境&#xff1a; ☆开发工具&#xff1a;eclipse ☆运行环境&#xff1a;tomcat6.0.20 ☆工程&#xff1a;动态web工程&#xff08;springmvc-chapter2&#xff09; ☆spring框架下载&#xff1a; spring-framework…

机器学习——支持向量机SVM之非线性模型(原问题和对偶问题)

目录 一、原问题&#xff08;prime problem&#xff09; 二、原问题的对偶问题&#xff08;dual problem&#xff09; 1、定义一个辅助函数 2、定义对偶问题 >>>问题1&#xff1a;上面说到遍历w&#xff0c;那w的取值范围和取值步长是怎样的&#xff1f;即遍历的…

(转)Apache Rewrite 详解

(转)Apache Rewrite 详解参考文档&#xff1a;http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.htmlApache Rewrite 详解一 入门RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php就这两行. 然后就完成了URL重写功能了. 首先服务器是需要支…