黑马程序员技术交流社区

标题: 成员变量不存在多态? [打印本页]

作者: xiaodaodan    时间: 2015-5-15 15:16
标题: 成员变量不存在多态?
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的多态性只针对方法来说的,成员变量不存在多态,因此成员变量只与访问的变量类型有关,而方法的调用遵从多态的规则。


作者: pvbj0314    时间: 2015-5-15 17:24
子类构造函数会隐含地使用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;}
}

作者: xiaodaodan    时间: 2015-5-15 22:36
pvbj0314 发表于 2015-5-15 17:24
子类构造函数会隐含地使用super()调用父类构造函数。使用下面的代码打印结果是2.
public class S {
        ...

你这个 是直接写了个构造函数,当然输出是2了,好好看看我的源代码,有其中的深意的
作者: xiaodaodan    时间: 2015-5-28 20:14
这么深一帖子,没人跟?太伤心了,这么好的帖子...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2