目录
一、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修饰的类不能被继承,没有子类。修饰的方法,不能被重写,可以被继承。修
饰的变量,不能多次被赋值。)