-
Object类的常见方法:
1): protected void finalize() :垃圾回收器在回收某一个对象之前,会先调用该方法,做扫尾操作.
2): Class getClass() :返回当前对象的真实类型。
3): int hashCode(): 返回该对象的哈希码值,hashCode决定了对象再哈希表中的存储位置,
4): boolean equals(Object obj) :拿当前对象(this)和参数obj做比较.
本身和 “ == ”符号相同,都是比较对象的内存地址.
官方建议:每个类都应该覆盖equals方法,不要比较内存地址,而去比较我们关心的数据
5):String toString():表示把一个对象转换为字符串.
打印对象时打印的就是对象的toString方法.
System.out.println(obj对象);等价于 System.out.println(obj对象.toString());
默认情况下打印对象,打印的是对象的十六进制的hashCode值
官方建议我们:应该每个类都应该覆盖toString,返回我们关心的数据. -
-
多态的前提:可以是继承关系(类和类)/也可以是实现关系(接口和实现类)
把子类对象赋给父类变量,在运行时期会表现出具体的子类特征(调用子类的方法).
编译类型必须是运行类型的父类/或相同.
当编译类型和运行类型不同的时候,多态就出现了.多态的作用:当把不同的子类对象都当作父类类型来看待,可以屏蔽不同子类对象之间的实现差异,从而写出通用的代码达到通用编程,
- 多态时方法调用问题:
- 情况1: doWork方法存在于SuperClass中,不存在于SubClass中.
此时执行结果: 编译通过,执行SuperClass的doWork方法.
应该先从SubClass类中去找doWork方法,找不到,再去父类SuperClass类中找. -
情况2: doWork方法存在于SubClass中,不存在于SuperClass中.
此时执行结果: 编译错误.
编译时期,会去编译类型(SuperClass)中找是否有doWork方法:
找 到:编译通过.
找不到:编译报错. -
情况3: doWork方法存在于SuperClass和SubClass中.
此时执行结果: 编译通过,执行SubClass的doWork方法.
在运行时期,调用运行类型(SubClass)中的方法.4.情况4: doWork方法存在于SuperClass和SubClass中,但是doWork是静态方法.
此时这种情况,我们称之为隐藏,而不叫方法覆盖.
此时执行结果: 编译通过,执行SuperClass的doWork方法.
静态方法的调用只需要类即可. -
强制类型转换: 把父类类型对象赋给子类类型变量(但是该父类类型变量的真实类型应该是子类类型).
Animal a = new Dog();
Dog d = (Dog)a; -
boolean b = 对象A instanceof 类B
- 情况1: doWork方法存在于SuperClass中,不存在于SubClass中.
day13-面向对象-object-多态-多态方法调用-代码块-final-单例
猜你喜欢
转载自blog.csdn.net/u013985548/article/details/81437046
今日推荐
周排行