传说中的狗熊掰棒子,前面掰了后面丢。每天ctrl c,ctrl v的习惯了,有些东西就真的忘干净了。在脑子里使劲儿的回忆一下,一点点的汇总出来,是个不错的过程。
先来说this ,姑且可以把this看成一个变量,它的值,就是当前对象的引用,所以通常我们在方法中使用this关键字来代表使用当前方法的对象的引用。从内存的角度分析,当前类创建一个当前类的对象,就是在堆内存中分配了一块空间,使用this,就是画了一根指向自己这块空间的箭头。
class User{
private String userName;
public User(String str){
this.userName = str;
}
}
再来说super,涉及到继承的概念,和this有着异曲同工之处,但是它可不是当前对象的引用,而是可以理解为当前对象的基类(父类)的引用,通常用来引用基类的成分(属性,方法)。从内存的角度解析,子类继承父类,当创建一个子类对象的过程中,就是在堆内存中分配了一块空间,且其中包含了一小块空间,便是父类的对象,理所当然父类的成分在这块儿内存中。使用super,就是画了一根指向父类这块空间的箭头。
class Father_1{
public void walk(){
System.out.println("this is Fahter's walk();");
}
}
class Son_1 extends Father_1{
public void run(){
super.walk();
System.out.println("the son's run();");
}
}
最后说final,这个词翻译成中文意思是“最终”,事实上java编译器也是这么理解它。final,最终的,所以不可以再改变。所以,定义为final的变量的值不可以改变,定义为final的方法不能被重写,定义为final的类不能被继承。记住它的含义,也就理解了这些硬性要求的存在。