Java面向对象进阶——(Object类、super、equals)

目录

一、Object类

1.直接继承和间接继承

2.Object类中关键字

3.Object类中关键字equals:

4.类中那些能继承,哪些不能继承

二、super用法

1.什么是super

2.super和this使用的区别

三、方法隐藏

四、final关键字

1.final修饰变量

2.final修饰方法

3.final修饰类


一、Object类

1.直接继承和间接继承

Java类如果没有用extends 去显式的继承一个类,则这个类继承了java.lang.Object类

public class Person extends Object{}

实现没有显式继承某类的类,Object类是其直接父类

Object类是所有类的根类。每个类都是object类的子类。

所有的Java类都直接或间接地继承了java.lang.Object类

 public class Person{
     
 }
 // 这两种方法是等价的
 public class Person extends Object{
​
 }

Object类是所有类的父类,Object类中的成员都是(public/protested修饰)在所有类中

都有所有类和数组类型都继承了Object类中的方法

      public static void main(String[] args) {
     /*
         java.lang.Object 类是所有类的父类, Object 类中的成员(都是public / 
         
     protected 修饰)在所有类中都有.
 */
2.Object类中关键字

(1)toString :当前对象的字符串形式表示,无固定写法,但一般都返回类 + 字段 + 值

(2)finalize: JDK 9 开始,弃用,垃圾回收

(3)getClass: 获取类的全限定名

(4)==:判断两个变量值是否相等,引用数据类型的值是其地址(引用)

(5)hashcode:根据地址计算哈希值,哈希不能决定equals,equals可以决定哈希,两个对

象 equals 为true 则hashCode值一样;hashCode值一样,equals结果不一定为true

  //        Object obj;
//      toString
 Cat cat = new Cat("加菲猫");
 
 int[] arr = new int[4];
 
 System.out.println(arr);
 System.out.println(cat);
 
 // hashCode() / equals()
 Student stu = new Student("张三", 23, '男', "A0001");
 Student stu1 = new Student("张三", 23, '男', "A0001");
 System.out.println(stu);
 System.out.println(stu1);
 
 /*
   == 判断两个变量值是否相等, 引用数据类型的值是其地址(引用)
   equals 用于判断两个对象是否相等,基于内容(字段)
  */
 System.out.println(stu == stu1);
 System.out.println(stu.equals(stu1));
 //        System.out.println(null == null); // true
     
// hashCode()  两个对象 equals 为true  hashcode 值一样, hashcode值一样,equals结果不一定为 true
 System.out.println(stu.hashCode());
 System.out.println(stu1.hashCode());
 
 System.out.println("Aa".hashCode());
 System.out.println("BB".hashCode());
 
 // getClass 获取对象的 Class 对象
 Class cla = stu.get

(6)getClass:获取对象的Class对象,包类,父类等的获取

(7)CLone:方法复制对象。浅拷贝。

3.Object类中关键字equals:

equals用于判断两个对象 是否相等,基于内容(字段),避免空指针异常。用于定义

两个对象相等的,基于内容字段。(==判断两个变量值是否相等,引用数据类型的值是其地

址)

(1)equals:返回的是布尔值

(2)重写equals要求:

equals重写 hashcode也要重写

对null返回false,

自反性:自己返回自己:x.equals(x) 返回TURE

对称性:x.equals(y) 与y.equals(x)的值一样

传递性 :x.equals(y)为true,y.equals(z)为true,x.equals(z)也为true。

一致性:x.equals(y)多次调用结果一致

4.类中那些能继承,哪些不能继承

(1)可见成员都能够继承

(2)构造/私有/static/是实例化构造器不能继承

二、super用法

1.什么是super

创建子类对象时需要先创建父类对象,默认在构造方法中第一行调用无参构造

在子类中要想使用父类里面的成员,可以使用super成员来调用,和this的使用类似,

但所表示的对象不同

2.super和this使用的区别

想要展示父类的值:就要使用super.变量名

三、方法隐藏

当子类有了和父类同名的字段(变量),就会发生隐藏(hiding),输出时就只会输出子类的值。

子类可以隐藏父类的变量,和static 无关,只要名字相同,与实例和static无关。 子类中和有父类的方法同名,也会隐藏。但是只在都有static情况下下会发生隐藏。如果在都不是静态的情况下,只会方法名同名就是重写,如果方法名同名,但是一个是静态,一个是实例,那么就会报错。

静态隐藏,实例重写。发生重写过后,调用的是重写后的方法,发生隐藏后,父调父,子调

子。没有实例初始化后,对象的值为默认值

变量是一个对象,static是一个方法是一个类

四、final关键字

1.final修饰变量

final可以修饰局部变量。

final修饰的变量称为常量,在声明时赋值,一旦被初始化就无法再被修改。常量必须

在声明时或在构造函数中初始化。常量命名一般采用大写字母和下划线。

2.final修饰方法

final修饰的方法称为不可覆盖方法之类无法重写该方法。final修饰的方法不能重写,

可以继承,可以重载。

3.final修饰类

final被修饰的类不能被继承。引用数据类型可以修改字段。static只能修饰成员变量。

final修饰类,final修饰的类称为不可继承类,表示该类不能被其他类继承。

(final修饰的类不能被继承,没有子类。修饰的方法,不能被重写,可以被继承。修

饰的变量,不能多次被赋值。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值