《Java编程思想》笔记 第九章 接口
1.抽象类和抽象方法
- 抽象方法,仅有方法声明没有方法体
abstract class AbstractClass{
abstract void f(); //没有 {} } - 只要有一个或者多个抽象方法,则必是抽象类,抽象类可以没有抽象方法。
- 抽象类内可以没有抽象方法,也可以只有实现的方法。
abstract class AbstractClass{ void g(){
System.out.println("hello");
}
} - 抽象类可以有自己各种权限的字段和方法,但抽象方法一定是public或者protected的,因为抽象类的抽象方法生来就是要被继承重写的。
- 继承抽象类,要覆写抽象类内的所有抽象方法,提供方法体,如果不提供方法体那么这个子类也是抽象类,前面要将加关键字
- 抽象类可以有静态代码块和非静态代码块。
2.接口
- 接口内没有任何具体实现,没有一个方法体。
public
interface Runnable { public abstract void run();
} - 接口中的方法默认public权限
- 接口中可以有成员变量,但被隐性设定为 static 和 final
- 接口中不能有代码块和静态代码块
- 接口权限和类一样也有public,但必须在同名文件中
3.协变类型:
- 子类中被覆写的方法返回类型可以是父类方法返回值的子类型
class A {
}
class B extends A {
}
abstract class AbstractClass {
abstract A g();
}
class C extends AbstractClass {
//返回值类型是A类型
// A g(){
// return null;
// }
//g() 返回值类型是A类型的子类型B也可以覆写
B g() {
return null;
}
}
4.多重继承
4.1 接口 extends 接口 , 接口,接口,. . .
4.2 类 extends 接口,接口,接口, . . .
4.3 类 extends 类 implements 接口,接口,接口, . . .
4.4 类 implements 接口,接口,接口, . . .
- 实现多个接口,这些接口中应该避免有相同的方法名
5.嵌套接口
- 接口可以嵌套在类中或者其他接口中
5.1 把嵌套的接口/类在A类外部看作A类的数据成员,在A类内部就看做正常的接口/类
5.2 类中嵌套的类或者接口权限可以是private
5.3 由于接口中的方法默认public,所以在接口中的接口不能被声明为private
5.4 嵌套中的 private接口 作用就是 让这个private接口中的方法无返回类型,不能向上转型
class A {
public class Ain{
}
//内部的类权限可以设定为private
private class Ain2{
}
public interface Aface{
}
private interface Aface2{
void f(); //必须返回空值
}
}
6.接口和抽象类和适配器模式
- 一个类直接实现接口就要实现接口中的所有方法,但有时并不想实现所有方法就可以使用适配器模式。
- 使用抽象类可以分离【接口实现】 和 接口, 接口实现可以有选择的实现接口中的部分方法,这就是适配器模式
- 适配器设计模式
7.接口和抽象类区别
- 语法区别如上
- 设计区别:抽象类是对一种事物的抽象,即对类抽象,而接口是对行为动作的抽象
- 这篇博客写的非常详细推荐
《Java编程思想》笔记 第九章 接口的更多相关文章
- java编程思想笔记(第一章)
Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...
- Java编程思想笔记(第二章)
第二章 一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(referenc ...
- Java编程思想——第17章 容器深入研究 读书笔记(三)
七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...
- Java编程思想——第17章 容器深入研究(two)
六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...
- Java编程思想 第21章 并发
这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...
- Java编程思想 笔记
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
- java编程思想笔记(1)
java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- 2.1(java编程思想笔记)位移操作
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
随机推荐
- incorrect integer value for column 问题解决
最近在用zend框架,然后装了一个项目,发现注册的时候出现 General error: 1366 Incorrect integer value: '' for column 'user_id' a ...
- C++关于堆的函数
建立堆 make_heap(_First, _Last, _Comp) 默认是建立最大堆的.对int类型,可以在第三个参数传入greater<int>()得到最小堆. 在堆中添加数据 ...
- 使用PHP静态变量当缓存的方法
下面这个PHP的代码实例,功能是帮助用户重置密码,requestResetPassword是接收用户重置密码的请求并且做了相应的检查.为了更好的复用性,我将重置密码的操作单独分配到一个新的resetP ...
- 【Python】Python 模块一考核
1. #!/usr/bin/python 和#!/usr/bin/env python 含义 大部分python文件的头部都会写上 #!/usr/bin/python 或者 #!/usr/bin/e ...
- JAVA多线程及补充
进程 运行中的应用程序叫进程,每个进程运行时,都有自已的地址空间(内存空间)如IE浏览器在任务管器中可以看到操作系统都是支持多进程的 线程 线程是轻量级的进程,是进程中一个负责程序执行的控制单元线程没 ...
- Codeforces Round #430 (Div. 2) Vitya and Strange Lesson
D.Vitya and Strange Lesson(字典树) 题意: 给一个长度为\(n\)的非负整数序列,\(m\)次操作,每次先全局异或\(x\),再查询\(mex\) \(1<=n< ...
- BZOJ5340 [Ctsc2018]假面 【概率dp】
题目链接 BZOJ5340 题解 我们能很容易维护每个人当前各种血量的概率 设\(p[u][i]\)表示\(u\)号人血量为\(i\)的概率 每次攻击的时候,讨论一下击中不击中即可转移 是\(O(Qm ...
- idea设置文件的编码格式
在打开某些类时会发现注释是乱码的,该如何解决idea的文件乱码呢?这就需要设置这个文件的合适编码格式: idea设置文件编码的两种方式分别如下: 第一种方式点击idea的右下角的图标如下图所示: 第二 ...
- windows下maven打包eclipse工程
打包过程中,可能出现的2个问题: ①.[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build ...
- 关于MyBatis的collection集合中只能取到一条数据的问题
问题:在涉及多表查询的时候,使用collection元素来映射集合属性时,出现了只能查询到一条数据的情况,但用sql语句在数据库中查询会有多条记录. 解决:如果两表联查,主表和明细表的主键都是id的话 ...