首页 > 其他分享 >读书笔记2

读书笔记2

时间:2022-10-28 20:56:18浏览次数:55  
标签:读书笔记 Object Dog 接口 抽象 抽象类 方法

接口与抽象类(深入多态)

什么是抽象类?

用abstract关键字声明抽象类,抽象类不能用new 关键字进行实例化。在设计继承结构时,必须决定清楚什么类是抽象类,什么类是具体类。编译器不会让你初始化一个抽象类。抽象类,除了被继承以外,是没有其它任何用途的。抽象类中,必须包含有抽象方法,还可以包含非抽象方法。

什么是抽象方法?

即用 abstract关键字声明的方法,抽象方法没有方法实体,即没有具体的实现过程。拥有抽象方法的类,必须声明为抽象类。抽象类中的抽象方法,用于规定一组子类共同的协议。

  1.   abstract class Animal {
  2.   // 抽象方法,没有方法体
  3.   public abstract void eat();
  4.   }

在继承过程中,具体类必须实现抽象父类的所有抽象方法

抽象方法没有具体的方法体,它只是为了标记出多态而存在。在覆写抽象父类的抽象方法时,方法名、参数列表必须相同,返回值类型必须兼容。Java很在乎你是否实现了抽象类的抽象方法。

  1.   public class Canine extends Animal {
  2.   // 覆写抽象类的抽象方法
  3.   public void eat() {
  4.   System.out.println("Canine,会吃食物!!");
  5.   }
  6.   // 非继承的方法
  7.   public void roam() {
  8.    
  9.   }
  10.   }

多态的使用

在Java中,所有类都是从Object这个类继承而来的,Object是所有类的源头,它是所有类的父类。Object有很有用的方法,如 equals(), getClass(), hashCode(), toString()等。

  1. Object类,是抽象类吗? 答:不是,它没有抽象方法。
  2. 是否可以覆写Object中的方法? 答:Object类中带有 final关键字的方法,不能被覆写。
  3. Object类有什么用? 答:用途一,它作为多态可以让方法应付多种类型的机制,以及提供Java在执行期对任何对象都需要的方法实现。另一个用途,它提供了一部分用于线程的方法。
  4. 既然多态类型这么有用,为什么不把所有的参数类型、返回值类型都设定为Object? 答:因为Java是强类型语言,编译器会检查你调用的是否是该对象确实可以响应的方法。即,你只能从确实有该方法的类中去调用。
  1.   Object dog = new Dog();
  2.   dog.toString(); // 这可以通过编译,因为toString()是Object类中自有的方法。
  3.   dog.eat(); // 这将无法通过编译,因为dog是Object类型,它调用的eat()方法在Object类中没有。

在使用多态时,要注意对象多种类型之间的差异。如下代码:

  1.   Dog dog1 = new Dog();
  2.   Animal dog2 = new Dog();
  3.   Object dog3 = new Dog();
  4.    
  5.   注意这三个dog对象的区别: dog1 拥有 Dog / Animal / Object中所有的方法。dog2 拥有 Animal / Object 中的方法,不能调用 Dog 类特有的方法。 dog3 只拥有Object 中的方法,不能调用 Animal / Dog类中的方法。这就是在使用多态过程中,需要特别注意的问题。
  6.    
  7.   那么该如何把 Object 类型的 dog转化成真正的 Dog 类型呢?
  8.   if (dog2 instanceof Dog) {
  9.   Dog dog4 = (Dog)dog2;
  10.   }
  11.   if (dog3 instanceof Dog) {
  12.   Dog dog5 = (Dog)dog3;
  13.   }
  14.   // 此时,dog4 / dog5 就是真正的 Dog类型了。

什么是接口?

接口,是一种100%纯抽象的类。接口中的所有方法,都是未实现的抽象方法。

为什么需要接口?

接口存在的意义,就是为了解决Java多重继承带来的致命方块问题。为什么接口可以解决致命方块的问题呢?因为在接口中,所有方法都是抽象的,如此一来,子类在实现接口时就必须实现这些抽象方法,因此Java虚拟机在执行期间就不会搞不清楚要用哪一个继承版本了。

  1.   // interface关键字,用于定义接口
  2.   public interface Pet {
  3.   public abstract void beFriendly();
  4.   public abstract void play();
  5.   }
  1.   // 继承抽象父类 Animal类, 实现 Pet接口
  2.   public class Dog extends Animal implements Pet {
  3.   // 实现接口中的抽象方法
  4.   public void beFriendly() {
  5.   System.out.println("实现 Pet接口中的 beFriendly()方法");
  6.   }
  7.   // 实现接口中的抽象方法
  8.   public void play() {
  9.   System.out.println("实现 Pet接口中的 play()方法");
  10.   }
  11.   // 覆写抽象父类中的抽象方法
  12.   public void eat() {
  13.   System.out.println("覆写抽象父类中的eat()抽象方法");
  14.   }
  15.   }
  1.   同一个类,可以实现多个接口!
  2.   public class Dog extends Animal implements Pet, Saveable, Paintable { ... }

如何判断应该是设计 类、子类、抽象类、还是接口呢?

  1. 如果新的类无法对其它的类通过 IS-A 测试时,就设计成不继承任何类的类。
  2. 只有在需要某个类的特殊化版本时,以覆写或增加新的方法来继承现有的类,得到子类。
  3. 当你需要定义一群子类的模板,又不想让程序员初始化该模板时,就设计出抽象类。
  4. 如果希望类可以扮演多态的角色,就设计出完全抽象的接口。

super关键字代表什么?

super代表父类,在子类中使用 super关键字指代父类,通过super还可以调用父类的方法。

  1.   // 抽象父类
  2.   abstract class Animal {
  3.   void run () {}
  4.   }
  5.   // 继承父类
  6.   class Dog extends Animal {
  7.   void run () {
  8.   super.run(); // 这里,调用并执行父类的 run() 方法
  9.   // do other things
  10.   }
  11.   }
  12.   Dog d = new Dog();
  13.   d.run(); // 这调用的是子类Dog对象的 run()方法。

标签:读书笔记,Object,Dog,接口,抽象,抽象类,方法
From: https://www.cnblogs.com/JIANGzihao0222/p/16837449.html

相关文章

  • CSS权威指南 读书笔记 第一章节
    CSS规则中,@import必须放在最前面,否则无效,但本人目前现在用的很少;CSS对规则间的空格并不敏感,规则内的也不敏感,所以在CSS语句中分隔模式可以是空格、tab符、换行,也可组合使......
  • 《微服务架构与实践》读书笔记
    第一章单块架构及其面临的挑战经典的三层架构:表示层:聚焦数据显示和用户交互;业务逻辑层:聚焦业务逻辑处理;数据访问层:聚焦数据的存储和访问。传统的单块架构应用的表现:功......
  • 读书笔记
    本博客为笔者阅读《程序员修炼之道:从小工到专家》的读书笔记十月第一篇这个十月份过的也太紧张了,无论是活动事务还是学习事务感觉都过于繁重了,基本上每天都是连轴转着实是......
  • MySQL 读书笔记(一)
    1MySQL表1.1索引组织表在InnoDB存储引擎中,表都是根据主键顺序存放的,这种存储方式称为索引组织表。InnoDB存储引擎中,每张MySQL表都有一个唯一主键,如果创建表时......
  • 读书笔记08-《解忧杂货店》东野圭吾
    《解忧杂货店》(日文名:ナミヤ雑貨店の奇蹟)[百度百科https://baike.baidu.com/item/解忧杂货店/12346806?fr=aladdin]《解忧杂货店》是东野老师最“不推理”的作品,但实际上......
  • 《敏捷软件开发原则、模式与实践》(美)Robert C.Martin著 读书笔记(第一部分 敏捷开发 第
    关键词:《敏捷软件开发原则、模式与实践》,(美)RobertC.Martin,读书笔记,极限编程第二章极限编程概述极限编程(XP)实践1)客户作为团队成员  最好的情况是——客户和开......
  • 读书笔记07-《恶意》东野圭吾
    《恶意》(日文名:あくい)[百度百科https://baike.baidu.com/item/恶意/9896445?fr=aladdin]《恶意》是日本推理小说家东野圭吾老师的作品,是我心目中的佳作之一,其实这不是我......
  • 《敏捷软件开发原则、模式与实践》(美)Robert C.Martin著 读书笔记(第一部分 敏捷开发)
    关键词:《敏捷软件开发》原则、模式与实践》,(美)RobertC.Martin著,读书笔记,敏捷开发,敏捷实践 第一章敏捷实践敏捷联盟。       敏捷宣言:个体和交互......
  • 读书笔记 | 代码整洁之道
    介绍著名的软件专家RobertC.Martin在他的著作《代码整洁之道:AHandbookofAgileSoftwareCraftsmanship》中写道:“编写整洁的代码是你必须做的,因此才可以称自己为专业......
  • 程序员的修炼之道:从小工到专家 读书笔记四
    第四章注重实效的的偏执本章开头就说明了:你不可能写出完美的软件。给定了这么压抑的事实,那么注重实效的程序员如何把他转化为有利条件呢?他们不信任自己,这对自己会犯的错......