写在之前 :
相对于之前的Java 学习速度慢了许多 之前的内容不断累积 导致在学新东西的时候会用到之前的 由于忘记之后 就衔接不上
所以断了一天回顾之前的。
super 关键字的使用 及其作用:
这里的应用讲解就会提到之前的学习内容
也就是——子类在继承了父类之后 实例化一个对象, 其构造方法总会被调用
其父类的构造方法也会被调用(也就是两个构造方法)
并且是父类构造方法先调用
子类构造方法会默认调用父类的 无参的构造方法
当父类同时有无参构造方法和有参构造方法:
使用关键字super 显式调用父类带参的构造方法
以下是子类继承父类之后的带参构造方法。
子类:
父类:
super(); 这样的格式是调用 父类的无参构造方法—— public Hero()
super(name); 这样是调用 父类的有参构造方法——public Hero(String name)
最好的理解就是super括号里的。
super关键字 调用父类属性:
子 父类里都有同样的属性——int moveSpeed;
super.moveSpeed ——super的作用就是在子类代码中调用父类的属性 方法等等 一种越级使用。
同理的this 也有this(); 可以在另一个方法中调用子类自身的构造方法
this(name); 这种作用也是一样的
示例——this.moveSpeed
这里也就回顾了之前的this的应用 this
子类重写父类方法的情况:
子类重写了父类的方法,并且在此方法中通过super调用父类的方法;
这样的好处就是重写方法后改变其方法作用 仍然能够调用之前父类方法的作用。
如果在父类中故意不提供 无参构造方法 只写有参构造方法
作为子类,无论如何 都会调用父类的构造方法。
默认情况下,会调用父类的无参的构造方法。
但是,当父类没有无参构造方法的时候( 提供了有参构造方法,并且不显示提供无参构造方法),子类就会抛出异常,因为它尝试去调用父类的无参构造方法。
这个时候,必须通过super去调用父类声明的、存在的、有参的构造方法
object类:
Object类是所有类的父类——声明一个类的时候,默认是继承了Object
public class Hero extends Object 只是平时没写全
Object类提供一个toString方法,所以所有的类都有toString方法
toString()的意思是返回当前对象的字符串表达
通过 System.out.println 打印对象就是打印该对象的toString()返回值
但在码代码的时候可以对toSting();这个方法进行重写 以达到更为方便的用处。
finalize()
也是object中提供的一个方法
当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件
当它被垃圾回收的时候,它的finalize() 方法就会被调用。
finalize() 不是开发人员主动调用的方法,而是由虚拟机JVM调用的。
equals()
也是object这个类中的。
equals() 用于判断两个对象的内容是否相同
假设,当两个英雄的hp相同的时候,我们就认为这两个英雄相同
==:
这不是Object的方法,但是用于判断两个对象是否相同
更准确的讲,用于判断两个引用,是否指向了同一个对象
目前学习的拓展内容:
但是权当了解 毕竟属于Java 高级运用的范畴
1、hashCode()——方法返回一个对象的哈希值
2、Object还提供线程同步相关方法
wait()
notify()
notifyAll()
3、getClass()会返回一个对象的类对象