this关键字
this代替的是当前调用方法属性时的那个对象,不一定是当前类的对象(在多态中体现)。
可以简单的认为,谁调用它(属性或者方法),this 就是谁。多态中体现出来的 this 不一定是当前类的对象。拿图中的来讲。就是:我有一个 Animal 对象 animal。我用这个 animal 对象调用了 show 方法。理应是调用了 Animal 类中的 show 方法。但是由于多态,animal 实际上调用的是 Person 类的 show 方法。
super 关键字
super 和 this 一样是指代次,代替的是对象
用 super 关键字可以调用父类的属性和方法
super代替的是当前执行方法时的对象的父类对象。
this 和 super 都能调用一般属性和一般方法,但是要注意,在调用一般方法的时候,不可以来回互相调用。虽然写法上和编译上没问题,但运行时,会出现栈溢出错误。
super可以调用构造方法(放在构造方法的第一行),构造方法之间不能来回互相调用
子类继承父类,在创建子类对象的时候,会先加载父类。在子类的构造方法中,会默认添加一行 super() 来调用父类的无参构造方法。如果显式的加上 super(可以写参数也可以不写); 默认的 super() 就没有了。比如在 Person 的无参构造方法里,在第一行显式地写上 super(“zhang3”,18); 那么就会调用父类的有参构造方法,而父类的无参构造方法就不会被调用了。