学习笔记,仅供参考


文章目录

  • 面向对象
    • 多态
      • 多态概述
      • 多态的成员访问
        • 成员变量
        • 成员方法
        • 静态成员方法

面向对象

多态

多态概述

  • 多态的概述

    • 事物存在的多种形态
  • 多态实现的前提
    • 要有继承关系
    • 要有方法重写
    • 要有父类引用指向子类对象
  • 举个例子
class PolymorphicTest1 {public static void main(String[] args) {Animal a = new Bunny();  //父类引用指向子类对象a.eat();}
}class Animal {public void eat() {System.out.println("动物吃饭");}
}class Bunny extends Animal {public void eat() {System.out.println("兔子吃提草");}
}

输出:

兔子吃提草

多态的成员访问

成员变量

我们先来看一个例子:

class PolymorphicTest1 {public static void main(String[] args) {Father f  = new Son();System.out.println(f.num);}
}class Father {int num = 10;
}class Son extends Father {int num = 20;
}

输出:

10

咦?为啥结果是10呢?按照上面的例子,我还以为是20呢!

我们来画一个内存图来了解一下:

对于成员变量来说,编译看左边(Father),运行也看左边(Father).

在父类引用指向子类对象中,我们左边的数据类型是Father,所以我们只能拿到父类的成员变量num。

成员方法

我们看一段代码:

class PolymorphicTest1 {public static void main(String[] args) {Father f  = new Son();f.print();}
}class Father {int num = 10;public void print() {System.out.println("Father");}
}class Son extends Father {int num = 20;public void print() {System.out.println("Son");}
}

输出:

Son

对于成员方法来说,编译看左边(Father),运行看右边(Son).

在父类引用指向子类对象中,编译时JAVA看左边(Father)是否有print()方法,而运行的时候却调用的是右边(Son)的print()方法。也就是说,如果父类(Father)中没有print()方法,那么编译将无法通过。

静态成员方法

我们看一段代码:

class PolymorphicTest1 {public static void main(String[] args) {Father f  = new Son();f.print2();   //相当于Father.print2();}
}class Father {int num = 10;public void print() {System.out.println("Father");}public static void print2() {System.out.println("Static Father");}
}class Son extends Father {int num = 20;public void print() {System.out.println("Son");}public static void print2() {System.out.println("Static Son");}
}

输出:

Static Father

对于静态成员方法来说,编译看左边(Father),运行也看左边(Father).

  • 总结

只有非静态的成员方法是编译看左边(Father),运行看右边(Son),其他的都是编译看左边(Father),运行也看左边(Father)

第三次学JAVA再学不好就吃翔(part34)--多态的成员访问相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

最新文章

  1. keras 的 example 文件 cnn_seq2seq.py 解析
  2. 02-VTK编译安装
  3. python绘图函数
  4. 【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
  5. python字符串查找数字_Python Regex - 在字符串中用逗号查找数字
  6. 首次使用maven的配置过程
  7. 全球及中国数字内容产业运行现状调研与盈利前景分析报告2022年
  8. 在显示器上面看到Lo的时候应该怎么想呢?一种可能的解释
  9. C 猴子选大王(亚瑟夫环)
  10. CVPR2020最全整理:分方向论文下载,Github源码、论文解读等[计算机视觉][目标检测]
  11. 收藏 | 500页阿里、滴滴、快手等公司的大数据最佳实践!PDF限时下载
  12. Ubuntu win8 小设备版本
  13. GBin1专题之Web热点秀#15
  14. 手机qq和电脑qq怎么同步消息_手机QQ接入华为HMS!停止运行也能接收消息
  15. 2018北语c语言程序2答案,北语21春《JAVA语言程序设计》作业2题目【标准答案】...
  16. Android ProgressDialog示例
  17. github上写简历
  18. 6m缓存和8m缓存差距_R5 3600和R5 3600X性能差距大吗?Ryzen5 3600和3600X区别对比评测(转)...
  19. 任玉刚:让你的职业迷茫从哪来回哪去
  20. CAD选择时会卡一下的解决办法

热门文章

  1. ValueError: cannot index a corpus with zero features (you must specify either `num_features` or a no
  2. IPython快捷键及命令
  3. 深度学习(九)——花式卷积
  4. 机器学习(十八)——关联规则挖掘
  5. 移动端cube界面设计html,滴滴 Web 移动端组件库 cube-ui 开源
  6. linux安装grub界面,系统安装: GRUB安装,配置及使用汇总
  7. Centos 7 文件管理基础命令
  8. 反思O2O演化的三个时代,大数据与智能化才是未来所在
  9. OLEDB Excel 与C# 的数据流通方法
  10. [javascript]图解+注释版 Ext.extend()