精华笔记:

  1. 多态:多种形态

    • 同一个对象被造型为不同的类型时,有不同的功能-------所有对象都是多态的(明天总结详细讲)

      • 对象的多态:水、我、你......

      同一类型的引用在指向不同的对象时,有不同的实现----所有抽象方法都是多态的

      • 行为的多态:cut()、getImage()、move()......
    • 向上造型/自动类型转换:

      • 超类型的引用指向派生类的对象------前面是超类型,后面是派生类型
      • 能点出来什么,看引用的类型
      • 能造型成为的数据类型:超类+所实现的接口
    • 强制类型转换,成功的条件只有两种:

      • 引用所指向的对象,就是该类型
      • 引用所指向的对象,实现了该接口或继承了该类
    • 强转时若不满足如上条件,则发生ClassCastException类型转换异常

      建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型

      说明:instanceof会返回true或false的结果

      ​ 如果满足强转成功的条件则返回true,否则返回false

      何时需要强转:向上造型后,若想访问的东西在超类中没有,则需要强转

笔记:

  1. 多态:多种形态

    • 同一个对象被造型为不同的类型时,有不同的功能-------所有对象都是多态的(明天总结详细讲)

      • 对象的多态:水、我、你......

      同一类型的引用在指向不同的对象时,有不同的实现----所有抽象方法都是多态的

      • 行为的多态:cut()、getImage()、move()......
    • 向上造型/自动类型转换:

      • 超类型的引用指向派生类的对象------前面是超类型,后面是派生类型
      • 能点出来什么,看引用的类型
      • 能造型成为的数据类型:超类+所实现的接口
    • 强制类型转换,成功的条件只有两种:

      • 引用所指向的对象,就是该类型
      • 引用所指向的对象,实现了该接口或继承了该类
    • 强转时若不满足如上条件,则发生ClassCastException类型转换异常

      建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型

      说明:instanceof会返回true或false的结果

      ​ 如果满足强转成功的条件则返回true,否则返回false

      何时需要强转:向上造型后,若想访问的东西在超类中没有,则需要强转

      public class MultiTypeDemo {
      public static void main(String[] args) {
      //成功的条件1:引用所指向的对象,就是该类型
      //成功的条件2:引用所指向的对象,实现了该接口或继承了该类
      Aoo o = new Boo(); //向上造型
      Boo o1 = (Boo)o; //引用o所指向的对象,就是Boo类型-----------符合条件1
      Inter o2 = (Inter)o; //引用o所指向的对象,实现了Inter接口---符合条件2
      //Coo o3 = (Coo)o; //运行时会发生ClassCastException类型转换异常
      if(o instanceof Coo){ //false
      Coo o4 = (Coo)o;
      }else{
      System.out.println("o不是Coo类型");
      } }
      }
      interface Inter{ }
      class Aoo{ }
      class Boo extends Aoo implements Inter{ }
      class Coo extends Aoo{ }

补充:

  1. 体会接口的好处:

    //复用性好、扩展性好、维护性好------------------高质量代码
    //被撞的是ObserveSubmarine-----调用ObserveSubmarine的getScore()-----10分
    //被撞的是TorpedoSubmarine-----调用TorpedoSubmarine的getScore()-----40分
    //被撞的是NuclearSubmarine-----调用NuclearSubmarine的getScore()-----100分
    if(s instanceof EnemyScore){ //------适用于所有实现EnemyScore接口的
    EnemyScore es = (EnemyScore)s;
    score += es.getScore();
    }
    //被撞的是MineSubmarine--------调用MineSubmarine的getLife()---------1
    //被撞的是NuclearSubmarine-----调用NuclearSubmarine的getLife()------3
    if(s instanceof EnemyLife){ //-------适用于所有实现EnemyLife接口的
    EnemyLife el = (EnemyLife)s;
    int num = el.getLife();
    ship.addLife(num);
    } //复用性差、扩展性差、维护性差------------------垃圾代码
    if(s instanceof ObserveSubmarine){ //---------只能适用于ObserveSubmarine的
    ObserveSubmarine os = (ObserveSubmarine)s;
    score += os.getScore();
    }
    if(s instanceof TorpedoSubmarine){ //---------只能适用于TorpedoSubmarine的
    TorpedoSubmarine ts = (TorpedoSubmarine)s;
    score += ts.getScore();
    }
    if(s instanceof MineSubmarine){ //---------只能适用于MineSubmarine的
    MineSubmarine ms = (MineSubmarine)s;
    int num = ms.getLife();
    ship.addLife(num);
    }
    if(s instanceof NuclearSubmarine){ //---------只能适用于NuclearSubmarine
    NuclearSubmarine ns = (NuclearSubmarine)s;
    score += ns.getScore();
    int num = ns.getLife();
    ship.addLife(num);
    }

面向对象ooDay9的更多相关文章

  1. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  2. 一起学 Java(二)面向对象

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  3. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  4. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  5. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  6. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  7. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  8. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  9. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  10. .NET基础拾遗(2)面向对象的实现和异常的处理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. 解决问题mount.nfs: Stale file handle

    原因出现在,机器1挂载了机器2的一个盘,然后机器2重启了,然后机器1变成没有响应的状态,然后卸载了机器1的对于这个盘的挂载,然后就一直挂不上,提示mount.nfs: Stale file handl ...

  2. 随机数Random和SecureRandom

    "Random" objects should be reused Bug Critical Main sources owasp-a6 Available SinceNov 16 ...

  3. ERA5气压层数据驱动WRF的一些问题

    感谢Dawn的建议,兰溪之水的WRF教程 参考了一些经验,并结合实际后,成功用ERA5驱动WRF.实际上,用ERA5数据驱动WRF的方法和用ERA-Interim 数据驱动WRF极其类似. 总结几点是 ...

  4. SQL in查询字段为Guid拼接处理办法

    场景一:在我们写SQL脚本执行普通的Id 为Int,Long 类型查询为 譬如: select *from Table where id in (1,2,3); 场景二:SQL in 查询,当查询字段 ...

  5. vue项目,npm run dev的时候出现:Error: error:0308010C:digital envelope routines::unsupported

    vue项目,npm run dev的时候出现:Error: error:0308010C:digital envelope routines::unsupported 这个是node的版本问题.我的n ...

  6. 吴恩达老师机器学习课程chapter09——异常检测

    吴恩达老师机器学习课程chapter09--异常检测 本文是非计算机专业新手的自学笔记,高手勿喷. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第十五章. 目录 吴恩达老师机 ...

  7. c语言 开灯问题 vs2019编译通过

    1 #include<stdio.h> 2 #include<stdlib.h> 3 //开灯问题 4 //总共有n盏灯,编号为1~n,k个人 5 //第一个人摁下所有灯的开关 ...

  8. centos7 yum安装配置Lnmp和负载配置

    首先配置防火墙CentOS 7.0默认使用的是firewall作为防火墙1.关闭firewall: systemctl stop firewalld.service #停止firewallsystem ...

  9. less的基本用法

    学习less详细文章链接 https://juejin.cn/post/6844903520441729037#heading-9

  10. 开发谷歌插件--web3钱包(一)

    之前开发了一款谷歌插件,因为很简单没有什么好记录的. 这次记录下一款新的钱包功能的插件,其中遇到的问题,以及解决方案. 首先遇到的问题就是唤醒: 小狐狸钱包应该都用过,点击图标就会唤起登录页面(pop ...