/*
看一下下面的程序,看是否你的答案和运行的答案是否一致!
*/
class Parent{
public int x;
public Parent p;
public Parent(){}
public Parent(int x){
this.x=x;
p=this;
}
public void f(){
System.out.println("Parent::f()");
}
public void g(){
System.out.println("Parent::g()");
}
public void h(){
System.out.println("Parent::h()");
f();
g();
y();
System.out.println("LOOK HERE: " + x);
}
private void y(){
System.out.println("Parent::y()");
}
};
class Child extends Parent{
public int x;
public Child(){}
public Child(int x){
super(x+5);
this.x=x;
}
public void f(){
System.out.println("Child f()");
}
public void g(){
System.out.println("Child g()");
}
};
public class ThisDemo {
public static void main(String[] args) {
Child ch=new Child();
ch.h();
System.out.println();
ch=new Child(5);
ch.h();
System.out.println();
ch.p.h();
}
}
其实c++this思想和java中的this思想差不多,就是在多态的情况下有一些不同,c++基类中的方法如果没有有virtual修饰,那么派生类的重写该方法时就不是覆盖,不会具有包含多态(c++多态的种类:强制多态、重载多态、类型参数化多态、包含多态(就是通过用virtual))!然而在java中,如果子类中重写了父类的方法,那么就是覆盖,就会产生像c++使用virtual的多态!
c++样例请点击这里:here!
输出结果:
/*
Parent::h()
Child f()
Child g()
Parent::y()
LOOK HERE: 0
Parent::h()
Child f()
Child g()
Parent::y()
LOOK HERE: 10//输出的是父类中的x
Parent::h()
Child f()
Child g()
Parent::y()
LOOK HERE: 10//输出的是父类中的x
*/