java中的this,super关键字

来源:互联网 发布:udp端口打开 编辑:程序博客网 时间:2024/05/17 08:56

说到this,可能大部分人知道是指代当前对象的引用,最常见的就是在构造函数中对一些基本的属性进行初始化赋值。

public class Student {       int id;       String name;       public Student(int id,String name){       this.id=id;       this.name=name;      }       public static void main(String[]Args){      Student ss=new Student(001,"南瓜灯");   }                  }

像这样对id,name进行初始化是经常所用到的。除此之外,还有通过this对其他构造函数的调用:

public class Student {        int id;        String name;              public Student(){       this(001, "南瓜灯");                   System.out.println("无参构造函数");        }       public Student(int id,String name ){       this.id=id;       this.name=name;                                      System.out.println("有参构造函数");      }          public static void main(String[]Args){      Student ss=new Student();   }          }

执行后的结果为:

有参构造函数

无参构造函数

也很好一节,this()掉=调用了另一个有参的构造函数。这里应该注意的是,在使用this()调用另一个构造函数的时候,只能把this()放在构造函数里的第一句,否则会出现Constructor call must be the first statement in a constructor的问题。

然后就是关键字super

super是直接父类对象的引用,可以通过super来访问父类中被子类覆盖的方法和属性下面举一个简单的例子说明:

class Animal {//父类Animal    public void eat(){  System.out.println("吃中....");}}class Bird  extends Animal{//子类Bird<pre name="code" class="java">    public void fly(){               super();System.out.println("飞...");}

}public class Test { public static void main(String[]args){ Bird bd=new Bird(); bd.eat();}}
子类Bird继承父类Animal,说到现在好像还没看到要说的重点,其实在父类的eat()方法与子类的fly方法中,隐含有一个方法,叫做super.即实际在eat方法中,应该是这样的:

public void eat(){                  super();//隐含的 System.out.println("吃中....");}
子类fly()方法中,应该是这样的:

public void fly(){               super();//隐含的System.out.println("飞...");}
当然两个super()所指向的不同,父类super()指向的为Object,子类BIrd指向的为父类的Animal

而且实际两个方法看似是空的,没有参数,实际也有默认的参数,就是我们这里所说的this,supe

public void eat(this,super){}public void fly(this,super){}
当然了我们不能把默认的this与super手动加上。说到这些,我们就可以看看上面整段代码在底层的运行效果:

先new一个Bird,然后执行到super()的时候,调用父类,一直向上,直到到Object,看过这图应该对执行的顺序有了一个清醒的认识

然后换一个图的方式:

可以看出子类对父类是一种包含关系,好了,说到这里,相信对this以及super有了一些认识吧

















0 0
原创粉丝点击