第三次学JAVA再学不好就吃翔(part34)--多态的成员访问
学习笔记,仅供参考
文章目录
- 面向对象
- 多态
- 多态概述
- 多态的成员访问
- 成员变量
- 成员方法
- 静态成员方法
面向对象
多态
多态概述
- 多态的概述
- 事物存在的多种形态
- 多态实现的前提
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
- 举个例子
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)--多态的成员访问相关推荐
- 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...
- 第三次学JAVA再学不好就吃翔(part106)--字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...
- 第三次学JAVA再学不好就吃翔(part46)--Scanner类
学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...
- 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...
- 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...
- 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符
学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...
- 第三次学JAVA再学不好就吃翔(part115)--多线程
学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...
- 第三次学JAVA再学不好就吃翔(part113)--对象操作流
学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...
最新文章
- keras 的 example 文件 cnn_seq2seq.py 解析
- 02-VTK编译安装
- python绘图函数
- 【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
- python字符串查找数字_Python Regex - 在字符串中用逗号查找数字
- 首次使用maven的配置过程
- 全球及中国数字内容产业运行现状调研与盈利前景分析报告2022年
- 在显示器上面看到Lo的时候应该怎么想呢?一种可能的解释
- C 猴子选大王(亚瑟夫环)
- CVPR2020最全整理:分方向论文下载,Github源码、论文解读等[计算机视觉][目标检测]
- 收藏 | 500页阿里、滴滴、快手等公司的大数据最佳实践!PDF限时下载
- Ubuntu win8 小设备版本
- GBin1专题之Web热点秀#15
- 手机qq和电脑qq怎么同步消息_手机QQ接入华为HMS!停止运行也能接收消息
- 2018北语c语言程序2答案,北语21春《JAVA语言程序设计》作业2题目【标准答案】...
- Android ProgressDialog示例
- github上写简历
- 6m缓存和8m缓存差距_R5 3600和R5 3600X性能差距大吗?Ryzen5 3600和3600X区别对比评测(转)...
- 任玉刚:让你的职业迷茫从哪来回哪去
- CAD选择时会卡一下的解决办法
热门文章
- ValueError: cannot index a corpus with zero features (you must specify either `num_features` or a no
- IPython快捷键及命令
- 深度学习(九)——花式卷积
- 机器学习(十八)——关联规则挖掘
- 移动端cube界面设计html,滴滴 Web 移动端组件库 cube-ui 开源
- linux安装grub界面,系统安装: GRUB安装,配置及使用汇总
- Centos 7 文件管理基础命令
- 反思O2O演化的三个时代,大数据与智能化才是未来所在
- OLEDB Excel 与C# 的数据流通方法
- [javascript]图解+注释版 Ext.extend()