《java程序设计》第五周学习总结


接口与实现

知识小点:
(1)用Arrays.sort方法对所有实现Comparable接口的对象进行排序
(2)接口体现了has-a关系,继承体现了is-a关系,设计时,选择继承或接口可以根据这种方法来判定。
(3)接口与抽象类的相同之处:都代表系统的抽象层,都不能被实例化,都能包含抽象方法
(4)接口与抽象类的不同之处:抽象类中可为部分方法提供默认的实现,接口中只能有方法声明,无方法实现, 抽象类可以实现多个接口,只能继承一个类,一个接口可以继承多个接口)

6.1 接口

初步的了解:一个类只能extends一个父类,但可以implements多个接口。java通过使用接口的概念来取代C++中多继承。与此同时,一个接口则可以同时extends多个接口,却不能implements任何接口。因而,Java中的接口是支持多继承的。

接口的声名格式
interface 接口的名字
接口体
接口中只有常量的声明和抽象方法,没有普通方法。
常量访问权限均为public,且为static常量(可省略public、final和static)。
抽象方法的访问权限均为public(可省略public和abstract)。

6.2 实现接口

类实现接口的格式
class 类名 implements 接口a,接口b...
重写接口中的方法
由于接口中的方法均为抽象方法,故而非抽象类实现接口时需重写接口中的所有方法。
方法权限必须为public。
java源文件可以同时拥有类和接口。
抽象类实现接口时既可以重写方法,也可以直接拥有接口中的方法(选择性重写)。
接口的进一步说明
程序通过接口名访问其中的常量,而类在实现接口后可以直接使用。
定义接口时使用public关键字即为public接口,如果不加则为友好借口,友好借口可被同一包中的类实现。
子类自动实现父类已实现的接口。
接口之间可通过关键字extends实现继承。

6.3 接口回调

接口属于引用型变量,接口变量中可以存放实现存放实现该接口的类的实例的引用。
当用接口声名一个变量,并用实现该接口的类给这个变量赋值后(可以用new存放引用),该变量即可调用类实现的接口方法(调用过程即为接口回调)。

interface ShowMessage {
void 显示商标(String s);
}
class TV implements ShowMessage {
public void 显示商标(String s) {
System.out.println(s);
}
}
class PC implements ShowMessage {
public void 显示商标(String s) {
System.out.println(s);
}
}
public class Example6_2 {
public static void main(String args[]) {
ShowMessage sm; //声明接口变量
sm=new TV(); //接口变量中存放对象的引用
sm.显示商标("长城牌电视机"); //接口回调。
sm=new PC(); //接口变量中存放对象的引用
sm.显示商标("联想奔月5008PC机"); //接口回调
}
}

6.4 理解接口

为什么要用接口
接口可以抽象出重要的行为标准,并让实现该接口的类各自重写其中的方法,即规范实现接口的各个类必须拥有某个名字相同,但内容完全不同的方法。
继承时有的abstract方法子类并不需要,这时可以使用接口,让类选择自己需要的方法。

6.5 接口与多态

不同的类在实现同一个接口时,具有不同的实现方式,即拥有某个名字相同,但内容完全不同的方法,那么接口变量在回调时就可能具有多种形态。

6.6 接口参数

如果一个方法的参数是接口类型,那么可以将任何实现该接口的类的实例的引用传递给该接口,从而回调类实现的接口方法。

6.7 abstract类和接口的比较

abstract类和接口的异同
二者都可以有abstract方法。
接口中只可以有常量,不能有变量;abstract类两个都能有。
abstract类中可以有非abstract方法,接口只能有abstract方法。

abstract类和接口的抉择
当需要继承某些变量或重要的非abstract方法时,考虑abstract类。
当只是需要某些重要的abstract方法的实现细节时,考虑使用接口。

6.8 面向接口编程

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。

与面向抽象编程的思想类似,面对接口编程同样是专注于设计程序,而将具体实现交由其他类,不同的是,抽象类将抽象方法的实现交给其子类,而接口将其交给了实现该接口的类。

使用接口进行程序设计的核心在于使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量回调类实现的接口方法。

利用接口可以体现程序设计的“开-闭原则”,即对扩展开放,对修改关闭。

ps: 面向接口编程的好处

面向接口编程就是代码与接口相关联,而不需要去考虑具体实现的类。只要某个类实现了相关的接口,我们编写的面向接口的代码就可以适用。如题目3中只要某个类实现了Comparable接口就可以使用Array.aort对其进行排序,而不用管这个类到底是什么类。

问题

接口常量的设置出现问题
后来研究发现,public一定要,且int x=xxx之前的都可以省略,但是一个常量一定要有初值,否则会出现编译错误

20175305张天钰《java程序设计》第五周学习总结的更多相关文章

  1. 20145302张薇 《Java程序设计》第二周学习总结

    20145302张薇 <Java程序设计>第一周学习总结 教材学习内容总结 第三章 第三章讲的是基本类型,变量,运算符和基本条件语句. 基本类型分为: 整数:short(2 byte),i ...

  2. 20145302张薇《Java程序设计》第九周学习总结

    20145302 <Java程序设计>第九周学习总结 教材学习内容总结 第十六周 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC目的:让Jav ...

  3. 201521123025<java程序设计>第五周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...

  4. Java程序设计第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...

  5. 20175305张天钰《java程序设计》第九周学习总结

    <java程序设计>第九周学习总结

  6. 20175313 张黎仙《Java程序设计》第九周学习总结

    目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...

  7. 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结

    20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...

  8. 20145313张雪纯 《Java程序设计》8周学习总结

    20145313张雪纯 <Java程序设计>8周学习总结 教材学习内容总结 java.util.logging包的优点在于提供了日志功能相关类与接口,不必额外配置日志组件就可以在标准jav ...

  9. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

  10. 20175204 张湲祯 2018-2019-2《Java程序设计》第二周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第二周学习总结 教材学习内容总结 -第二章基本数据类型与数组要点: -标识符与关键字:标识符的第一个字符不能是数字字符: ...

随机推荐

  1. STL迭代器iterator

    一:迭代器原理 迭代器是一个“可遍历STL容器内全部或部分元素”的对象. 迭代器指出容器中的一个特定位置. 迭代器就如同一个指针. 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范 ...

  2. netcore项目在Windows部署:使用NSSM部署Windows服务

    NSSM部署Windows服务 1 准备工作 在Windows平台部署Asp.net core应用程序一般采用IIS,但是如果我们的net core应用执行的是定时任务,需要开机自启,稳定运行的话,使 ...

  3. Asp.Net Core 新篇章

    一. 二. 三. 系列章节 第一节:.Net Core环境的安装和常用指令 第X节:XXXXXXXXXXXXXXXXXXXXXXXXXXXX 第X节:XXXXXXXXXXXXXXXXXXXXXXXXX ...

  4. 【转】Steam 开发者收入计算

    全部说的话有点复杂,捡要点说说: 假设收入100美刀. 假设美区收入50刀,非美区(在美国以外的地区,俄罗斯,中国等等其他国家)收入50刀. 1.分给steam 30% 剩下70刀. 开发者所得美区收 ...

  5. 查看变更(git diff)

    git diff命令 如果想要知道变更的具体内容,可以使用git diff命令.它被用来解决两个问题: 哪些变更还没有被暂存? 那些已暂存的变更正待提价? git diff在git status基础上 ...

  6. CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解决方法

    1.停用mysql服务:# /etc/rc.d/init.d/mysqld stop 2.输入命令:# mysqld_safe --user=mysql --skip-grant-tables --s ...

  7. python 文本比对

    # -*- coding:utf-8 -*- import difflib import sys def readfile(filename): try: fileHandle = open(file ...

  8. 盒子取球C语言 蓝桥杯

    盒子取球方法二今盒子里有 n 个小球,A.B 两人轮流从盒中取球,每个人都可以看到另一个人取了多少个, 也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定:每个人从盒子中取出 ...

  9. Spring Cloud 2.x-前言

    Spring Cloud Spring Boot  简介 模块介绍 文章列表 简介 微服务已经成为企业开发的标配,阿里的Dubbo已经被企业大规模使用,Spring Cloud作为后起之秀,同时也是 ...

  10. oracle insert into 插入多组数据方法总结

    网上好多oracle 的文章,多是以oracle开头,内容确实其他sql,一幅气死人不偿命的嘴脸着实让人难受. 今天就更新点oracle 使用insert into插入数据的方式: 1.oracle ...