1.抽象类和抽象方法

  1. 抽象方法,仅有方法声明没有方法体

    abstract class AbstractClass{
    abstract void f(); //没有 {} }
  2. 只要有一个或者多个抽象方法,则必是抽象类,抽象类可以没有抽象方法。
  3. 抽象类内可以没有抽象方法,也可以只有实现的方法。
    abstract class AbstractClass{
    
        void g(){
    System.out.println("hello");
    }
    }
  4. 抽象类可以有自己各种权限的字段和方法,但抽象方法一定是public或者protected的,因为抽象类的抽象方法生来就是要被继承重写的。
  5. 继承抽象类,要覆写抽象类内的所有抽象方法,提供方法体,如果不提供方法体那么这个子类也是抽象类,前面要将加关键字
  6. 抽象类可以有静态代码块和非静态代码块。

2.接口

  1. 接口内没有任何具体实现,没有一个方法体。

    public
    interface Runnable { public abstract void run();
    }
  2. 接口中的方法默认public权限
  3. 接口中可以有成员变量,但被隐性设定为 static 和  final
  4. 接口中不能有代码块和静态代码块
  5. 接口权限和类一样也有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.接口和抽象类区别

  1. 语法区别如上
  2. 设计区别:抽象类是对一种事物的抽象,即对类抽象,而接口是对行为动作的抽象
  3. 这篇博客写的非常详细推荐

《Java编程思想》笔记 第九章 接口的更多相关文章

  1. java编程思想笔记(第一章)

    Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...

  2. Java编程思想笔记(第二章)

    第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(referenc ...

  3. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  4. Java编程思想——第17章 容器深入研究(two)

    六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...

  5. Java编程思想 第21章 并发

    这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...

  6. Java编程思想 笔记

    date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...

  7. java编程思想笔记(1)

    java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...

  8. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

  9. 2.1(java编程思想笔记)位移操作

    java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...

随机推荐

  1. Week2 Teamework from Z.XML 软件分析与用户需求调查(三)必应助手体验评测

    评测人:毛宇 肖俊鹏 说明:言辞激烈,请勿介意 我花了2天的时间来试用这个软件<必应缤纷桌面手机助手>,有了很多体会,这里,我来谈一下这款软件在体验部分的表现情况. 体验部分主要分为三个部 ...

  2. UVA 437 The Tower of Babylon(DAG上的动态规划)

    题目大意是根据所给的有无限多个的n种立方体,求其所堆砌成的塔最大高度. 方法1,建图求解,可以把问题转化成求DAG上的最长路问题 #include <cstdio> #include &l ...

  3. [比赛总结]ACM div3 G 比赛总结

    这次题目总体感觉和做阅读理解差不多,英文题目读起来相当费劲. 另外,这次比赛整个队伍中我们三个都突出存在的问题就是,把简单问题复杂化,抓不到事物的本质,因此很容易的就被题目误导. 比如C题,明明想到了 ...

  4. Jquery tmpl详解

    Jquery tmpl是动态请求数据来更新页面非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 ...

  5. php array_merge和“+”的区别和使用《细说php2》

    php array_merge和“+”的区别和使用

  6. 机器学习:最近邻规则KNN算法

    这个算法就比较简单易懂了 就是把每个向量的特征值抽象成坐标,寻找最近的k个点,来进行划分 代码如下 #include <iostream> #include <cstdio> ...

  7. 洛谷 P2168 [NOI2015]荷马史诗 解题报告

    P2168 [NOI2015]荷马史诗 题目描述 追逐影子的人,自己就是影子 --荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷 ...

  8. 怎么让Intellj Idea 把数据库的表映射成hibernate的domain对象

    步骤如下: 第一步:连接数据源: 点击:idea右边的database.如下图所示: 或者你依次点击:view-->Tool windows--->database 然后你将看在如下点击下 ...

  9. There is an overlap in the region chain

    ERROR: (regions day_hotstatic,860010-2355010000_20140417_12_entry_00000000321,1398674475358.0dc20573 ...

  10. JavaScript获取HTML元素样式的方法(style、currentStyle、getComputedStyle)

    一.style.currentStyle.getComputedStyle的区别 style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的. currentStyle可以弥补st ...