狂神说:面向对象(三)——多态

news/2024/3/28 18:18:18/文章来源:https://blog.csdn.net/smiledawen/article/details/129241046

多态

// 对象能执行什么方法,主要看对象左边的类型,和右边的没有关系

多态:同一方法可以根据发送对象的不同而采用不同的行为方式

父类:

public class Person
{public void run(){System.out.println("Person => run");}}

子类:

public class Student extends Person{@Overridepublic void run() {System.out.println("Student => run");}public void eat(){System.out.println("Student => eat");}
}

test.java

public class test {public static void main(String[] args) {// 一个对象的实际类型是确定的(左边)// 指向的引用类型不确定Person s1 = new Person();// 父类的引用 指向子类Person s2 = new Student();// 对象能执行什么方法,主要看对象左边的类型,和右边的没有关系s2.run();s2.eat();}
}

IDEA可以把s2强制转换为Student

4. 多态存在的条件

  • 存在继承关系

  • 子类重写父类

  • 父类的引用,指向子类:Person person = new Student();

不能多态的情况:

  • static方法: 属于类的方法

  • final方法: 最终的,不能被继承重写

  • private方法: 私有的

5. instance判断是不是类的对象

用于判断对象的运行类型,是否是某个类的类型或者其子类型

        // Object>Person>StudentStudent student = new Student();System.out.println(student instanceof Student); // trueSystem.out.println(student instanceof Person);  // trueSystem.out.println(student instanceof Object);  // true//System.out.println(student instanceof String);  // 报错了Person person = new Student();System.out.println(person instanceof Student);  // !! true!!System.out.println(person instanceof Person);   // trueSystem.out.println(person instanceof Object);  // trueObject object = new Student();System.out.println(object instanceof String); // falseString string = new String();System.out.println(string instanceof  Object);  // !! true

6. 类型转换

父类型引用指向子类型,无法调用子类型的方法,这时将对象强制转换为子类型

((Student) person).eat();

  • 向上转型upcasting:子类对象赋值给父类引用,Father father = new Son();

  • 向下转型downcasting:指向子类对象的父类引用,赋值给子类引用, Son son = (Son)father,这个father就是上面提到的那个father

Tip: 写方法时,父类作为参数,传入子类对象,就是利用了向上转型。这时子类自己的方法不好使,重写了父类的方法的可以用,父类的方法也可以用。

修饰符

  1. static

静态变量属于类,在创建类时分配内存,各对象共享static类变量

非静态变量属于对象,在创建对象时分配内存,对象间不共享

    public static void main(String[] args) {/*Person <- StudentPerson <- TeacherPerson中有static变量nameStudent和Teacher中各自有一个变量Age*/// s2改变了s1的name,因为name是共享的static变量Person s1 = new Student();s1.setName("s1");System.out.println(s1.name);    // s1Person s2 = new Teacher();s2.setName("s2");System.out.println(s1.name);     // s2//s2设置的Age值不会影响到s1,因为是各自的变量,不是类共享的((Student) s1).setAge(3);System.out.println(((Student)s1).getAge()); //3((Teacher) s2).setAge(4);System.out.println(((Teacher)s2).getAge());// 4((Student) s1).setAge(3);System.out.println(((Student)s1).getAge());//3}
  1. final

  • 修饰类:该类不能被继承

  • 修饰方法:该方法可以被继承,但继承后不能被重写

  • 修饰变量

  • 局部变量:

  • 如果是形参设为final则不能在方法体中赋值,因为已经在传参时赋过一次了。

  • 如果是函数体中的局部变量,只能赋值一次,不能多次赋值

  • 非静态成员变量:声明时赋值; 匿名代码块赋值; 构造器中赋值【可以把声明时赋值和在代码块中赋值理解成一个,都是声明时赋值,写法不一样罢了】

    // 声明时赋值private final int b = 1;// 匿名代码块赋值{final int d = 5;}// 构造器赋值private final int a;public Person(int a) {this.a = a;}
  • 静态成员变量:声明时赋值; 静态代码块赋值

    // 静态成员变量:不能在构造器中赋值,声明时赋值private static final int b = 0;// 或者用“静态代码块”,也是声明时赋值static{int b = 1;int c = 2;}
  • 引用变量:正常使用 就是不能再重赋值了

  1. abstract

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75048.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【并发编程学习篇】深入理解CountDownLatch

一、CountDownLatch介绍 CountDownLatch&#xff08;闭锁&#xff09;是一个同步协助类&#xff0c;允许一个或多个线程等待&#xff0c;直到其他线程完成操作集。CountDownLatch使用给定的计数值&#xff08;count&#xff09;初始化。await方法会阻塞直到当前的计数值被coun…

只需四步,手把手教你打造专属数字人

伴随ChatGPT的问世&#xff0c;在技术与商业运作上都日渐发展成熟的数字人产业正持续升温。去年9月&#xff0c;北京市发布了国内首个数字人产业专项支持政策&#xff0c;提出将依托国家文化专网将数字人纳入文化数据服务平台。以数字人、ChatGPT为代表的互联网3.0创新应用产业…

kali下安装Volatility

一、About Volatility Volatility是一款开源内存取证框架&#xff0c;能够对导出的内存镜像进行分析&#xff0c;通过获取内核数据结构&#xff0c;使用插件获取内存的详细情况以及系统的运行状态。 Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全…

FAST‘23《λ-IO: A Unified IO Stack for Computational Storage》论文解读

FAST’23《λ-IO: A Unified IO Stack for Computational Storage》论文解读 Data:2023-2-27 Ref: Z. Yang et al., “λ-IO: A Unified IO Stack for Computational Storage,” in 21st USENIX Conference on File and Storage Technologies (FAST 23), Santa Clara, CA, Feb.…

数据可视化第二版-03部分-06章-比较与排序

文章目录数据可视化第二版-03部分-06章-比较与排序总结可视化视角-比较与排序代码实现创建虚拟环境1. python版本管理2.切换到指定版本后安装虚拟环境切换路径到文件当前路径柱形图环形柱状图子弹图哑铃图雷达图词云图教材截图数据可视化第二版-03部分-06章-比较与排序 总结 …

Java 多线程 --- 多线程的相关概念

Java 多线程 --- 多线程的相关概念Race Condition 问题并发编程的性质 --- 原子性, 可见性, 有序性上下文切换 (Context Switch)线程的一些故障 --- 死锁, 活锁, 饥饿死锁 (Deadlock)活锁(Livelock)死锁和活锁的区别饥饿(Starvation)背景: 操作系统 — 线程/进程 同步 Race Co…

【unity学习记录】Canvas Group组件

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Canvas Group组件 Canvas Group画布组介绍详解1. Alpha2. Interactable3. Blocks Raycasts4. Ignore Parent Groups介绍 画布组…

6.0.4:GrapeCity Documents for Excel GcExcel Crack

在更短的时间内生成 Excel 电子表格&#xff0c;不依赖于 Excel&#xff01; 在任何应用程序中转换、计算、格式化和解析电子表格。 快速高效&#xff1a;其轻巧的尺寸意味着 Documents for Excel 针对快速处理大型 Excel 文档进行了优化 使用适用于 Windows、Linux 和 Mac 的…

JVM 学习(2)—简单理解强、软、弱、虚 Java 四大引用

一、Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期&#xff0c;以便在不同场景下灵活地处理对象的回收问题。不同类型的引用在垃圾回收时的处理方式不同&#xff0c;可以用来实现不同的垃圾回收策略。Java 目前将其分成四类&#xff0c;类图如下&…

mysql一两种索引方式hash和btree

1. Hash索引&#xff1a; Hash 索引结构的特殊性&#xff0c;其检索效率非常高&#xff0c;索引的检索可以一次定位&#xff0c;不像B-Tree 索引需要从根节点到枝节点&#xff0c;最后才能访问到页节点这样多次的IO访问&#xff0c;所以 Hash 索引的查询效率要远高于 B-Tree 索…

信息安全概论之《密码编码学与网络安全----原理与实践(第八版)》

前言&#xff1a;在信息安全概论课程的学习中&#xff0c;参考了《密码编码学与网络安全----原理与实践&#xff08;第八版&#xff09;》一书。以下内容为以课件为主要参考&#xff0c;课本内容与网络资源为辅助参考&#xff0c;学习该课程后作出的总结。 一、信息安全概述 1…

力扣Top100题之两数相加(Java解法)

0 题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数…

MVCC 当前读 快照读 RC read view RR下事务更新不会丢失

MVCC(multi-version-concurrent-control) MVCC是行锁的一个变种&#xff0c;但MVCC在很多情况下它避免了加锁。不是buffer块&#xff0c;而是buffer中的记录行。 MVCC (Multi-Version Concurrency Control) (注&#xff1a;与MVCC相对的&#xff0c;是基于锁的并发控制&#x…

【无限思维画布】制作思维导图第五步,节点创建与连接,拖拽对齐与双击缩放

正在为无限词典制作单词思维导图功能&#xff0c;实现无限单词导图&#xff0c;无限思维画布。目前制作到第五步&#xff0c;实现节点创建、节点连接、节点拖拽对齐&#xff1a; 节点创建与连接&#xff0c;拖拽对齐Details 第四步&#xff0c;推倒重来。 一开始受vue-mindma…

【Python小程序】这款成语接龙小程序,让小孩儿轻松记住500个成语,在家里常玩,语文直上135,仅此一份,快收藏~(太强大了)

前言 学习路上&#xff0c;那我同行。 哈喽~大家晚上好呀&#xff0c;我是你们的栗子同学。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 成语接龙是一个传统的文字游戏。很多孩子都喜欢玩。…

Lesson9---回归问题

9.1 机器学习基础 课程回顾 Python语言基础Numpy/Matplotlib/Pandas/Pillow应用TensorFlow2.0 低阶API 即将学习 机器学习、人工神经网络、深度学习、卷积神经网络典型模型的TensorFlow2.0实现 9.1.1 机器学习 机器学习&#xff08;Machine Learning&#xff09;&#xf…

关于C语言中最大公因数的思考

目录 如何去求最大公因数利用枚举法&#xff1a; 如何去求最大公因数利用辗转相除法&#xff1a; 例1&#xff1a;最大公因数使用for循环和if语句 示例2&#xff1a;最大公因数使用while循环和if ... else语句 例3&#xff1a;正负数均为最大公因数 如何去求最大公因数利用…

【2023-02-27】349.两个数组的交集

题目链接&#xff1a;349.两个数组的交集 解题思路&#xff1a;点我 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int>res_set;unordered_set<int>nums1_set(nums1.beg…

qt-c++进阶1-window、linux下获取本机所有网卡ip信息、根据网卡名获取ip地址。

系列文章目录 例如&#xff1a;第一章 主要是通过qt-c实现获取本机电脑的网卡信息或者是IP信息 文章目录系列文章目录前言一、获取本机网卡IP信息1.1 获取ip地址方法1.2 代码实例总结前言 总结c获取本机网卡信息的方法 第一章&#xff1a;适用于windows操作系统、linux操作系…

Aspose.Slides for .NET 授权须知

Aspose.Slides是一款用于生成&#xff0c;管理和转换PowerPoint幻灯片的本机API&#xff0c;可以使用多种格式&#xff0c;而不需要Microsoft PowerPoint。并且可在任何平台上操作PowerPoint演示文稿。 Aspose.Slides for .NET是一款.NET PowerPoint管理API&#xff0c;用于读…