java中父类构造方法中的this指向谁

码农与厨子 发布于 2013/08/31 12:29
阅读 3K+
收藏 3
public class Test {

    public Test() {
    }
    
    public static void main(String[] args) {
        new s();
    }
}

class F{
    public F() {
        System.out.println(this.getClass().getName());
        this.f1();
    }
    public void f1() {
        System.out.println(1234);
    }
}

class s extends F{
    public s() {
        
    }
    
    public void hello() {
        System.out.println(123);
    }

}


this指向谁 //运行结果是 s子类

但是又输出1234

加载中
2
小白小霸王
小白小霸王

this表示某个类的实例,运行时的某个类的实例。
你给的例子中的this全是类s的一个实例。(这就是为什么this.getclass().getname得到子类的包路径名,而不是父类)
虽然你的this写在了F中,但是你的this是通过new s()进来的

为什么this.f1(); 输出了数据?因为this是子类,继承了父类中的f1方法啊

0
Uknowzheng
Uknowzheng
首先你应该注意到一个问题,其实你new s的时候,并没有调用他的hello方法。但是会引发一个链式反映,先创建他的父类F之后再建立S,但是呢,创建F的时候,他的构造方法里面   public F() { 
        System.out.println(this.getClass().getName()); 
        this.f1(); 
    } 调用了F1方法,this表示父类的,即调用父类的F1方法,所以打印出来是1234,S的方法并没有使用。
码农与厨子
码农与厨子
为啥this.getclass().getname得到子类的包路径名,而不是父类
0
小白小霸王
小白小霸王
把子类中的hello改成 f1 ,然后再看看它是输出123还是1234??
码农与厨子
码农与厨子
1234 为啥this.getclass().getname得到子类的包路径名,而不是父类
返回顶部
顶部