super关键字:在子类对象中引用父类的成分(包括父类的成员变量和成员方法)
class FatherClass //定义父类
{
public int value;
public void f()
{
value = 100;
System.out.println
("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass //定义子类,它继承了父类
{
public int value; //定义了和父类同名的成员变量
public void f() //重写了父类的方法f()
{
super.f(); //使用super /在子类的方法中调用了父类的方法f();
value = 200; //这个value是子类的
System.out.println("ChildClass.value="+value);
System.out.println(value); //打印子类的value
System.out.println(super.value);//打印父类的value
}
}
public class TestInherit
{
public static void main(String[] args)
{
ChildClass cc = new ChildClass();
cc.f();
}
}
上图的代码反映在内存中如下图所示;
this关键字:java虚拟机管理调用的时候除了知道调用哪个方法,还得知道是调用哪个对象对不对??一个类可以有多个对象,对象ABCDEFG,你调用的时候就要告诉虚拟机,要调用的是A对象的方法,或者属性。如何告诉虚拟机呢??就是传递一个A对象的引用给虚拟机,而 this 关键字就可以访问这个引用。所以我们可以通过this关键字访问到当前对象的任一方法或者属性。(static除外,那是独立于对象的)
package test;
public class ThisTest {
private int i=0;
ThisTest(int i)//第一个构造函数
{
this.i=i+1;//此时this表示引用成员变量i,而非函数参数i
System.out.println(i);
System.out.println(this.i);
//从两个输出结果充分证明了i和this.i是不一样的!
}
ThisTest(String s)//第二个构造函数
{
System.out.println("String constructor: "+s);
}
ThisTest(int i,String s){// 第三个构造方法:有一个int型形参和一个String型形参
this(s);//this调用第二个构造器
this.i=i++;//this以引用该类的成员变量
System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s);
}
public ThisTest increment(){
this.i++;
return this;//返回的是当前的对象,该对象属于(ThisTest)
}
public static void main(String[] args){
ThisTest tt0=new ThisTest(10);
ThisTest tt1=new ThisTest("ok");
ThisTest tt2=new ThisTest(20,"ok again!");
System.out.println(tt0.increment().increment().increment().i);
//tt0.increment()返回一个在tt0基础上i++的ThisTest对象,
//接着又返回在上面返回的对象基础上i++的ThisTest对象!
}
}