第五章 继承

简介: 类,超类和子类super和this看似有相似的概念, 但实际没有可比性,this持有对象本身的引用, 可以赋值给另一个变量,super则不具备这样的功能, 它只是一个指示编译器调用超类方法的关键字调用super()构造器的语句必须是子类构造器的第一条语句Object: 所有类的超类判断两个对象是否相等可以使用Objects.

类,超类和子类

  • super和this看似有相似的概念, 但实际没有可比性,this持有对象本身的引用, 可以赋值给另一个变量,super则不具备这样的功能, 它只是一个指示编译器调用超类方法的关键字
  • 调用super()构造器的语句必须是子类构造器的第一条语句

Object: 所有类的超类

  • 判断两个对象是否相等可以使用Objects.equals()静态方法, a.equals(b)的方式如果a=null时会报异常
  • equals()方法的最佳实践:
    1. 参数命名为otherObject
    2. 检测this和otherObject是否引用同一对象, if(this==otherObject) return true;
    3. 检测otherObject是否为null,为null则返回false,if(otherObject==null) return false;
    4. 比较this和otherObject是否为同一个类,如果equals()的语义在每个子类中有改变, 就使用getClass()检测, if(this.getClass()!=otherObject.getClass()) return false; 如果所有子类都有统一的语义, 就使用instanceOf检测
    5. 将otherObject转化为相应的类类型变量,ClassName other = (ClassName)otherObject
    6. 对所有的域进行比较,==比较基本类型,equals比较对象,所有均匹配返回true, 如果子类重新定义了equals(),就要在其中包含调用super.equals(other).

  • 如果不想让子类重新实现equals()方法, 就将其定义为final, 并在其中实现对象的相等比较逻辑
  • Objects.hashCode()方法可以进行参数安全检查,如果参数时null该方法返回0,否则对参数调用hashCode()方法
  • 使用静态的Double.hashCode()来避免创建Double对象,其他包装类也可以这样使用
  • Objects.hashCode()提供了多参数方法,所以可以将多个值传入计算组合的hashcode.
  • Arrays.toString()可以打印数组,Arrays.deepToString()可以打印多维数组

泛型数组列表

  • 可以使用@SuppressWarnings("unchecked")标注来标记变量能够接受类型转换

对象包装器和自动装箱

  • Java可以对包装类进行自动装箱和拆箱, 这就导致包装类的行为有点像基本类型,但对于==比较来说不成立,应该使用equals()方法
  • 另外,装箱对象可能为null,null做运算会抛出异常(NullPointerException)
  • 装箱拆箱时编译器的行为,而不是虚拟机,生成class字节码时由编译器插入必要的方法.
  • 包装类时不可变的,也就是作为参数传递的包装类变量不会在方法内改变

参数数量可变的方法

  • 允许将数组传递给可变参数方法的最后一个参数

枚举类

  • 枚举类比较使用==即可

反射

  • 不建议使用反射,因为反射的大多实现都需要进行类型转换,使用直接调用或者lamda更好;另外反射比较脆弱,容易出问题,且出了问题不好查找
相关文章
|
6月前
|
存储 编译器 C++
C++基础知识(六:继承)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
7月前
详尽分享继承和多态对应的几类问题
详尽分享继承和多态对应的几类问题
29 0
|
7月前
|
Java
JavaSE——面向对象高级一(3/4)-面向对象三大特征之二:继承(初步认识继承、了解继承的好处)
JavaSE——面向对象高级一(3/4)-面向对象三大特征之二:继承(初步认识继承、了解继承的好处)
30 0
|
7月前
|
Java
继承基础知识
继承基础知识
23 0
|
8月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
62 0
|
8月前
|
算法 编译器 C语言
【C/C++ 编程题 01】用C++设计一个不能被继承的类
【C/C++ 编程题 01】用C++设计一个不能被继承的类
82 0
|
8月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
83 2
|
8月前
掌握面向对象程序设计继承和派生机制的概念
掌握面向对象程序设计继承和派生机制的概念
53 0
多态性概念及案例
多态性概念及案例
67 0
面向对象程序设计第七章:继承与派生
面向对象程序设计第七章:继承与派生
152 0
面向对象程序设计第七章:继承与派生

热门文章

最新文章