当前位置: 首页 > java >正文

java基础学习(二十一)

文章目录

  • 5-3 四种访问权限修饰符
  • 5-4 关键字:super
    • super的概念
    • 调用父类的构造器
    • this和super的区别
  • 5-5 面向对象特征之三:多态性
    • 多态性的概念
    • 多态性应用举例
    • 虚拟方法调用(Virtual Method Invocation)
    • 多态小结
    • instanceof 操作符
    • 对象类型转换 (Casting )

5-3 四种访问权限修饰符

  • Java权限修饰符public、protected、 (缺省)、 private置于类的成员定义前,用来限定对象对该类成员的访问权限。
  • 对于class的权限修饰只可以用public和default(缺省)。
    1. public类可以在任意地方被访问。
    2. default类只可以被同一个包内部的类访问。
修饰符内部类同一个包不同包的子类同一个工程
privateyes
缺省yesyes
protectedyesyesyes
publicyesyesyesyes

5-4 关键字:super

super的概念

  • 在Java类中使用super来调用父类中的指定操作:
    1. super可用于访问父类中定义的属性
    2. super可用于调用父类中定义的成员方法
    3. super可用于在子类构造器中调用父类的构造器
  • 注意:
    1. 尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员
    2. super的追溯不仅限于直接父类
    3. super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

调用父类的构造器

  • 子类中所有的构造器默认都会访问父类中空参数的构造器
  • 当父类中没有空参数的构造器时,子类的构造器必须通过**this(参数列表)或者super(参数列表)**语句指定调用本类或者父类中相应的构造器。同时,只能”二选一”,且必须放在构造器的首行
  • 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错

this和super的区别

NO区别点thissuper
1访问属性访问本类中的属性,如果本类没有此属性则从父类中继续查找直接访问父类中的属性
2调用方法访问本类中的方法,如果本类没有此方法则从父类中继续查找直接访问父类中的方法
3调用构造器调用本类构造器,必须放在构造器的首行调用父类构造器,必须放在子类构造器的首行

5-5 面向对象特征之三:多态性

多态性的概念

  • 多态性,是面向对象中最重要的概念,在Java中的体现,对象的多态性:父类的引用指向子类的对象
    1. 可以直接应用在抽象类和接口上
  • Java引用变量有两个类型:编译时类型运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。
    1. 若编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism)
    2. 多态情况下, “看左边”:看的是父类的引用(父类中不具备子类特有的方法)“看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)
  • 对象的多态 —在Java中,子类的对象可以替代父类的对象使用
    1. 一个变量只能有一种确定的数据类型
    2. 一个引用类型变量可能指向(引用)多种不同类型的对象
Person p = new Student();
Object o = new Person();//Object类型的变量o,指向Person类型的对象
o = new Student(); //Object类型的变量o,指向Student类型的对象
  • 子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。
  • 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
Student m = new Student();
m.school = “pku”; //合法,Student类有school成员变量
Person e = new Student(); 
e.school = “pku”; //非法,Person类没有school成员变量

多态性应用举例

  • 方法声明的形参类型为父类类型,可以使用子类的对象作为实参调用该方法
public class Test {public void method(Person e) {// ……e.getInfo();}public static void main(Stirng args[]) {Test t = new Test();Student m = new Student();t.method(m); // 子类的对象m传送给父类类型的参数e}
}

虚拟方法调用(Virtual Method Invocation)

  • 正常的方法调用
Person e = new Person();
e.getInfo();
Student e = new Student();
e.getInfo();
  • 虚拟方法调用(多态情况下)
  • 子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。
Person e = new Student();
e.getInfo(); //调用Student类的getInfo()方法
  • 编译时类型和运行时类型
  • 编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类 的getInfo()方法。——动态绑定

多态小结

  • 多态作用:提高了代码的通用性,常称作接口重用
  • 前提:
    1. 需要存在继承或者实现关系
    2. 有方法的重写
  • 成员方法:
    1. 编译时:要查看引用变量所声明的类中是否有所调用的方法。
    2. 运行时:调用实际new的对象所属的类中的重写方法。
  • 成员变量:不具备多态性,只看引用变量所声明的类。

instanceof 操作符

  • x instanceof A:检验x是否为类A的对象,返回值为boolean型。
    1. 要求x所属的类与类A必须是子类和父类的关系,否则编译错误。
    2. 如果x属于类A的子类B,x instanceof A值也为true。

对象类型转换 (Casting )

  • 基本数据类型的Casting:
    1. 自动类型转换:小的数据类型可以自动转换成大的数据类型
    2. 强制类型转换:可以把大的数据类型强制转换(casting)成小的数据类型
  • 对Java对象的强制类型转换称为造型
    1. 从子类到父类的类型转换可以自动进行
    2. 从父类到子类的类型转换必须通过造型(强制类型转换)实现
    3. 无继承关系的引用类型间的转换是非法的
    4. 在造型前可以使用instanceof操作符测试一个对象的类型
http://www.xdnf.cn/news/10542.html

相关文章:

  • oscp练习 PG Wombo
  • 「完整」AI文档库 | 5月20最新发布,221页,《北京大学AI+Agent与Agentic+AI的原理和应用洞察与未来展望》
  • ChatOn:智能AI聊天助手,开启高效互动新时代
  • pikachu靶场通关笔记09 XSS关卡05-DOM型XSS-X
  • 第18讲、Odoo接口开发详解:原理、类型与实践
  • 【软件测试】火狐驱动下载镜像
  • Golang学习之旅
  • linux驱动 - 5: simple usb device驱动
  • 小白的进阶之路系列之十----人工智能从初步到精通pytorch综合运用的讲解第三部分
  • CppCon 2014 学习:Exception-Safe Coding
  • [免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • Cesium快速入门到精通系列教程四:加载渲染GEOJSON数据
  • BA-SAM: 用于 Segment Anything 模型的可扩展偏置模式注意力掩码
  • vue-13(延迟加载路由)
  • Oracle的Hint
  • 2025/6月最新Cursor(0.50.5版本)一键自动更换邮箱无限续杯教程
  • Spring 5 响应式编程:构建高性能全栈应用的关键
  • 数据库系统概论(十二)SQL 基于派生表的查询 超详细讲解(附带例题表格对比带你一步步掌握)
  • MySQL-多表关系、多表查询
  • Qt OpenGL 相机实现
  • 机器学习算法:逻辑回归
  • 操作系统复习
  • 方法重写与方法重载详解
  • CSS之动画(奔跑的熊、两面反转盒子、3D导航栏、旋转木马)
  • 谷歌CEO皮查伊眼中的“下一代平台“与未来图景
  • 基于FPGA的VGA显示文字和动态数字基础例程,进而动态显示数据,类似温湿度等
  • Pyomo中线性规划接口的使用
  • 为什么ping显示connect:network is unreachable,如何排查网络不通问题?
  • LearnOpenGL-笔记-其十三
  • py爬虫的话,selenium是不是能完全取代requests?