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

Java基础知识总结(48)

(1)super关键字 1. super代表父类对象 2. 在构造器中访问父类的构造器(创建子类对象时会先创建父类对象) 3. super访问父类的实例变量 4. 访问父类的实例方法

 如:/*** 父类* @author Ray**/public class Animal {String name;int legs;
​public Animal() {}
​public Animal(int legs) {this.legs = legs;}
​public void run() {System.out.print(this.legs);}}
​/*** Cat类 继承自Aniaml类* @author Ray**/public class Cat extends Animal{
        public Cat(){//调用有参构造函数this(4);}
​public Cat(int i){//调用父类的有参构造函数super(i);}}
​/*** 测试类* @author Ray**/public class Test {
​public static void main(String[] args) {// TODO Auto-generated method stubCat cat = new Cat();cat.run();//调用cat对象继承的实例方法run}
​}
​如果在某个方法中访问某个成员变量,但是没有显式的指定调用者,则编译器查找顺序如下:
​1. 查找该方法中是否含有该局部变量2. 查找当前类中是否包含该实例变量3. 查找直接父类中是否包含该变量,依次向上追溯所有父类,如果直到Object类还是没有找到,则编译错误

(2)Object类

    getClass():获得当前对象的类对象                                     hashCode()返回:当前对象的hashCode()      equals():判断两个对象是否相等重写equals方法:/*** 学生类* @author Ray*/public class Student {
​String name;int age;String NO;
​public Student() {}
​public Student(String name,int age,String NO) {this.name = name;this.age = age;this.NO = NO;}
​/*** 重写父类Object中的equals方法*/public boolean equals(Object obj) {//判断是否为同一引用if(this == obj) {return true;}//判断传入对象是否为nullif(obj == null) {return false;}//判断是否为同一类型if(obj.getClass() != Student.class) {return false;}//向下转型Student s1 = (Student)obj;//判断实例变量是否相等if(this.name.equals(s1.name)&&(this.age ==s1.age)&&(this.NO.equals(s1.NO))) {return true;}return false;}}
​/*** 子类* @author Ray**/public class Pupil extends Student{
​String name;int age;String NO;
​public Pupil(String name, int age, String NO) {this.name = name;this.age = age;this.NO = NO;}}
​/*** 测试类* @author Ray**/public class Test {
​public static void main(String[] args) {// TODO Auto-generated method stub
​Student student1 = new Student("张无忌",18,"2019217719");Student student2 = new Student("张无忌",18,"2019217719");System.out.println(student1.equals(student2));}
​}面试题:为什么要重写equals方法?判断两个对象是否相等时,Object类中的方法只能判断两对象是否为同一引用,无法满足子类需要,所以要重写equals方法。重写equals方法时要满足如下特性:自反性∶ 对任意 x,x.equals(x)一定返回 true。对称性∶ 对任意x和 y,如果 y.equals(x)返回 true,则x.equals(y)也返回 true。传递性∶ 对任意x,y,z,如果x.equals(y)返回 ture,y.equals(z)返回 true,则x.equals(z)一定返回 true。一致性∶ 对任意x和 y,如果对象中用于等价比较的信息没有改变,那么无论调用 x.equals(y)多少次,返回的结果应该保持一致,要么一直是 true,要么一直是 false。对任何不是 null 的x,x.equals(null)一定返回 false。                                                  clone():克隆并返回当前对象副本                                   toString():打印该对象                                               notify():线程唤醒                                                 notifyAll():线程唤醒                                                 wait():线程等待                                                 finalize():通知垃圾回收器回收,该方法不确实实际执行时间,不推荐使用 |

(3)多态

    Java中创建对象时,有两种类型,等号左边的编译时类型,等号右边叫做运行时类型,当编译时类型和运行时类型不一致时,就会产生多态当把一个子类对象直接赋值给父类引用变量时,当运行时调用该变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就是相同类型的变量、调用同一个方法是呈现出多种不同的行为特征,这就是多态。多态可以理解为同一对象调用相同方法,展现的不同行为,主要通过方法重写和方法重载实现。/*** 子类 * @author Ray**/public class Pupil extends Student{
​String name;int age;String NO;
​public void test(){System.out.print("子类方法");}}/*** 学生类 * @author Ray*/public class Student {
​String name;int age;String NO;
        public void test() {System.out.print("父类方法");}}
​/*** 测试类* @author Ray**/public class Test {
​public static void main(String[] args) {// TODO Auto-generated method stub//父类引用指向子类对象Student student = new Pupil();//子类对象中如果存在该方法则调用子类对象的,如果不存在该方法则调用父类对象的student.test();//子类方法}
​}

(4)初始化块和静态初始化块 初始化块: 初始化块可以初始化实例变量 初始化块会先于构造器执行 静态初始化块: 先于初始化块执行,静态初始化块不能对实例变量进行初始化块

相关文章:

  • 106. 跑步锻炼(结果填空)
  • 蓝桥杯 2022 省 B 洛谷 P8787 砍竹子
  • Terminal常见快捷命令(持续更新)
  • 利用Leaflet + React:构建WEBGIS
  • 2024第十九届中国(温州)机械装备展9月20-22日举行
  • IDEA 宝贝插件
  • 靡语IT:Bootstrap 简介
  • 【Vue】组件
  • 集合类多线程(JUC)
  • Redis 的主从复制、哨兵和cluster集群
  • 腾讯云短暂崩溃2小时
  • Leetcode 150. 逆波兰表达式求值和Leetcode 55. 跳跃游戏
  • 原型设计模式的学习
  • Linux生态系统:探索Linux的开源世界
  • 二:什么是RocketMQ
  • Akka系列(七):Actor持久化之Akka persistence
  • GraphQL学习过程应该是这样的
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript 基本功--面试宝典
  • JavaScript类型识别
  • JS学习笔记——闭包
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • opencv python Meanshift 和 Camshift
  • Sass 快速入门教程
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue的全局变量和全局拦截请求器
  • vue自定义指令实现v-tap插件
  • 关于for循环的简单归纳
  • 技术:超级实用的电脑小技巧
  • 前端攻城师
  • 如何优雅地使用 Sublime Text
  • 入手阿里云新服务器的部署NODE
  • 软件开发学习的5大技巧,你知道吗?
  • 使用 @font-face
  • 使用API自动生成工具优化前端工作流
  • 听说你叫Java(二)–Servlet请求
  • 一个项目push到多个远程Git仓库
  • 译米田引理
  • 【云吞铺子】性能抖动剖析(二)
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​渐进式Web应用PWA的未来
  • # 透过事物看本质的能力怎么培养?
  • #控制台大学课堂点名问题_课堂随机点名
  • $().each和$.each的区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (pojstep1.3.1)1017(构造法模拟)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 物件導向與老子思想 (OO)
  • (转载)(官方)UE4--图像编程----着色器开发
  • .gitignore文件_Git:.gitignore
  • .net 4.0发布后不能正常显示图片问题