一)super()、super.和 this()、this.
1、super()和super.区别?
1)super():调用父类无参构造器,一定在子类构造器第一行使用!如果没有那么表示默认存在的super()的,这是Java默认添加super的();
2)super.:访问父类对象,父类对象的引用,与this用法一致;
2、 this()和this.区别?
1)this:在运行期间,那个对象在调用this所在的方法,this就代表哪个对象,绑定到当前“这个对象”。
2) this():调用本类的其他构造器,按照参数调用构造器,必须在构造器中使用,必须在第一行使用,this() 与 super() 互斥,不能同时存在。
3)this.:是访问当前对象,本类对象的引用,在能区别实例变量和局部变量时,this可以省略,否则一定不可以省略!
4)如果子父类中出现非私有的同名成员变量时,子类要访问本类中的变量用this. ;子类要访问父类中的同名变量用super. 。
eg1:方法参数传递原理 与 this关键字
eg2:this. 和 this()
class Cell {
int x; int y;
public Cell() {
this(1,1);//调用本类的其他构造器 }
}
public Cell( int x, int y){
this.x = x ; this.y = y;
}
public static void main(String[] args) {
Cell c = new Cell();
System.out.println(c.x + ","+c.y);
}
}
结果:1 ,1
eg3、super
class Xoo{
public Xoo(int s) {
System.out.println("Call Xoo(int)");
}
}
//super()用于在子类构造器中调用父类的构造器
class Yoo extends Xoo{
public Yoo(int s) {
super(s);
}
//public Yoo() {}//编译错误,子类调用不到父类型无参数构造器
super(100);//super(100) 调用了父类 Xoo(int) 构造器}
}
二)重写Override与重载Overroad关键字区别
1、重写:通过类的继承关系,由于父类中的方法不能满足新的要求,因此要在子类中修改从父类中继承的方法叫重写(覆盖)。
1)方法名、参数列表、返回值类型与父类一样,但是方法体不一样。若方法名、参数列表相同,但返回值类型不同会有编译错误!若方法名、返回值类型相同,参数列表不同,则不叫重写。
2)子类若继承了抽象类或者实现了接口,则必须要重写全部的抽象方法。若没有全部实现抽象方法,则子类仍是一个抽象类!
3)子类重写抽象类中的抽象方法或者接口方法时,访问权限修饰符一定要大于或等于被重写的抽象方法的访问权限修饰符!
4)静态方法只能重写静态方法。
2、重载Overroad:方法名一样,参数列表不同的方法构成重载的方法(多态的一种形式)。
1)调用方法:根据参数列表和方法名调用不同方法;
2)与返回值类型无关;
3)重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应调用哪个方法。