接口是什么?它是一种百分之百纯抽象的类。
什么是抽象类?即无法初始化的类。
 
例如,我们设计一个animal类,以此类为父类,分别设计了多种动物子类,例如Lion,Tiger,Cat,Wolf,Dog类。
 
Wolf aWolf = new Wolf();

Animal aHippo = new Hippo();

以上都是正确,而下面这句代码就有问题了。

Animal anim = new Animal();
 
注意:有些类是不应该被初始化的,就是这些类不能被"new"出来。
通过标记类为抽象类,编译器就知道不管在哪里,这个类就是不能创建任何类型的实例。
 
设计继承结构时,就要确定哪些类是抽象的,而哪些是具体的,具体的类是实际可以被初始化为对象的。
 
虽然抽象类不能创建实例,但是还是可以使用抽象类来声明为引用类型给多态使用。
 
抽象的方法
除了类之外,你也可以将方法标记为abstract。抽象的类代表此类必须要被extend过,抽象的方法代表此方法一定要被覆盖过。
抽象的方法没有实体!
如果你声明出一个抽象的方法,就必须将类也标记为抽象的。不能在非抽象类中拥有抽象方法。
 
问:为什么要有抽象的方法?我认为抽象类的重点就在于可以被子类继承的共同程序代码。
答:将可继承的方法体(也就是有内容的方法)放在父类中是个好主意,但有时就是没有办法作出给任何子类都有意义的共同程序代码。抽象方法的意义是就算无法实现出方法的内容,但还是可以定义出一组子类共同的协议。
问:这样做的好处是....?
答:就是多态!记住,你想达成的目标是要使用父型作为方法的参数,返回类型,或数组的类型。通过这个机制,你可以加入新的子型到程序中,却又不必重写或修改处理这些类型的程序。因此多态的好处就在于所有子型都会有那些抽象的方法。
 
你必须实现所有抽象的方法
实现抽象的方法就如同覆盖过方法一样
抽象的方法没有内容,它只是为了标记出多态而存在。
这表示在继承树结构下的第一个具体类必须要实现出所有的抽象方法。
 
要记得抽象类可以带有抽象和非抽象的方法。当我们说到"你必须实现所有抽象的方法"时,表示说你必须写出内容。
 
对象之母:Object
在java中的所有类都是从Object这个类继承出来的。
没有直接继承过其他类的类会是隐含的继承对象。
 
Object中有什么?

对象与抽象类
 
可以覆盖过Object的方法?
部分可以。但是有些被标记final,这代表你不能覆盖掉它们。强烈建议用自己写的类去覆盖掉hashCode(),equals(),toString()。
 
所以Object的主要目的是提供多态的参数与返回类型吗?
这个Object类有两个主要目的:作为多态让方法可以应付多种类型的机制,以及提供java在执行期对任何对象都有需要的方法的实现程序代码。
 
 
ArrayList<Object> myDogArrayList = new ArrayList<Object>();
Dog aDog = new Dog();
myDogArrayList.add(aDog); 当运行以下代码时:
Dog d = myDogArrayList.get(0);
无法通过编译,调用get方法会返回Object类
任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管它原来是什么。
 

 
“多态”意味着“很多形式”
当你把对象装进ArrayList<Object>时,不管它原来是什么,你只能把它当作是Object。
从ArrayList<Object>取出引用时,引用的类型只会是Object。
这代表你只会取得Object的遥控器。
 
接口(interface)可以用来解决多重继承的问题
java的接口就好像100%的纯抽象类,所有接口的方法都是抽象的。
 
要点:
  • 如果不想让某个类被初始化,就以abstract这个关键词将它标记为抽象的。
  • 抽象的类可以带有抽象和非抽象的方法。
  • 如果类带有抽象的方法,则此类必定标识为抽象的。
  • 抽象的方法没有内容,它的声明是以分号结束。
  • 抽象的方法必须在具体的类中运行。
  • java所有的类都是Object直接或间接的子类。
  • 方法可以声明Object的参数或返回类型。
  • 不管实际上所引用的对象是什么类型,只有在引用变量的类型就是带有某方法的类型时才能调用该方法。
  • Object引用变量在没有类型转换的情况下不能赋值给其他的类型,若堆上的对象类型与所要转换的类型不兼容,则此转换会在执行期产生异常。
  • 从ArrayList<Object>取出的对象只能被Object引用,不然就要用类型转换来改变。
  • java不允许多重继承
  • 接口就好像是100%纯天然抽象类
  • 以interface这个关键词取代class来声明接口
  • 实现接口时要使用implements这个关键词。
  • class可以实现多个接口
  • 实现某接口的类必须实现它所有的方法。
  • 要从子类调用父类的方法可以用super这个关键词来引用。

【Head First Java 读书笔记】(八)接口与抽象类的更多相关文章

  1. 1)Java学习笔记:接口和抽象类的异同

    Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结 相同 ① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承 ② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必 ...

  2. Java 读书笔记 (八) 修饰符

    Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 访问控制修饰符 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象.类.接口.变量.方法. ...

  3. Java学习笔记之接口和抽象类

    接口(interface)1.interface创建一个接口,implements实现接口 interface jiekou{} class lie implements jiekou{}2.接口可以 ...

  4. head first java读书笔记

    head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...

  5. think in java 读书笔记 3 —— 数据报

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...

  6. think in java 读书笔记 2 —— 套接字

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...

  7. think in java 读书笔记 1 ——移位

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...

  8. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  9. [Effective Java 读书笔记] 第三章类和接口 第十八--十九条

    十八条 接口优于抽象类 接口的特点: 1.一个类可以实现多个接口,不能继承多个类(抽象类) 2.接口不能有具体的方法实现,只定义标准类型 骨架类: 即实现一个abstract类来实现接口,提供给其他类 ...

随机推荐

  1. FBVector

    folly/FBVector.h Simply replacing std::vector with folly::fbvector (after having included the folly/ ...

  2. mysql压缩表空间

    REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] ...

  3. 100.64.0.0/10运营商级(Carrier-grade)NAT保留IP地址

    在一次跟踪路由的网络操作时发现自己路由器下一跳路由节点的IP地址比较奇怪,是100.64.0.1.好奇促使我查询了这个IP地址的归属,结果是保留地址,到这里觉得比较奇怪了,按照常理以IPv4为例保留的 ...

  4. Android APP压力测试实战

    环境准备: Android SDK Python   压测实战步骤 1.在手机开发者工具中,将USB调试选上 2.确认手机,电脑成功连接(通过adb devices) 3.安装测试app(adb in ...

  5. 21_java之File对象和递归遍历

    01IO技术概述 * A:IO技术概述 * a: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 * b: Input * 把持久设备上的数据读取到内存中的这 ...

  6. 概述XML

    xml概述--->干什么的 存储一对多的数据 作为配置文件存储数据 xml组成---->怎么用 元素的分类 包含标签体的标签(有开始标签和结束标签) 例如: <student> ...

  7. Django学习---自定义分页

    自定义分页 简单例子: urls.py: from django.contrib import admin from django.urls import path from django.conf. ...

  8. Python 小知识点(10)--异常结构记录

    try: print("try中") except KeyError as e: # 异常时,执行该块 print("异常中") else: # 主代码块(tr ...

  9. 全景之HDR

    全景之HDR拍摄 全景HDR流程: 1.相机拍摄 1.1  HDR拍摄 HDR拍摄需要拍摄不同曝光度的多张图片. 1.2 摄像师消去 需要摄像师在不同位置(一般为相机的两面),拍摄两次HDR. 注意: ...

  10. 避免IE在ajax请求时,返回json出现下载

    转自:https://blog.csdn.net/z521q1314/article/details/54409048