A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaodaodan 中级黑马   /  2015-5-15 15:16  /  657 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class S {
        String s = "你猜";

        public static void main(String[] args) {
                S2 s2 = new S2();
                s2.display();
        }
}

class S1 {
         int s = 1;

        public void display() {
                System.out.println(s);
        }
}

class S2 extends S1 {
        int s = 2;
       
}


运行结果是1  ...  是不是很汗   咋看都是2 怎么输出了1,最后百度出一句话:
   当调用子类构造函数构建子类对象的时候,必然会先调用父类的构造函数,即构建一个父类对象(怎么得到这个对象?),因此父类的成员(变量和方法)也会被构建。 如果存在同名,内存中将会同时存在父类的同名成员和子类的同名成员。由于Java的多态性只针对方法来说的,成员变量不存在多态,因此成员变量只与访问的变量类型有关,而方法的调用遵从多态的规则。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

3 个回复

倒序浏览
子类构造函数会隐含地使用super()调用父类构造函数。使用下面的代码打印结果是2.
public class S {
        String s = "你猜";

        public static void main(String[] args) {
                S2 s2 = new S2();
                s2.display();
        }
}

class S1 {
        int s = 1;

        public void display() {
                System.out.println(s);
        }
}

class S2 extends S1 {
    S2(){ s = 2;}
}
回复 使用道具 举报
pvbj0314 发表于 2015-5-15 17:24
子类构造函数会隐含地使用super()调用父类构造函数。使用下面的代码打印结果是2.
public class S {
        ...

你这个 是直接写了个构造函数,当然输出是2了,好好看看我的源代码,有其中的深意的
回复 使用道具 举报
这么深一帖子,没人跟?太伤心了,这么好的帖子...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马