黑马程序员技术交流社区

标题: 代码报错求解 [打印本页]

作者: xiaobaosdu    时间: 2016-6-12 22:05
标题: 代码报错求解
class test {
        public static void main(String[] args) {
                Zi z = new Zi();       
        }
}
class Fu {
    int a = 1;
        static {
                System.out.println("静态代码块Fu");
        }
        {
                System.out.println("构造代码块Fu");
                System.out.println("构造代码块fu执行时c的值"+this.c);//这一句会报错“找不到符号”
        }
        public Fu() {
                System.out.println("构造方法Fu");
                System.out.println("构造方法fu执行时a的值"+this.a);
        }
}
class Zi extends Fu {
        int c = 3;
        static {
                System.out.println("静态代码块Zi");
        }
        {
                System.out.println("构造代码块Zi");
                System.out.println("构造代码块Zi执行时c的值"+this.c);
        }
        public Zi() {
                System.out.println("构造方法Zi");
                System.out.println("构造方法Zi执行时c的值"+this.c);
        }
}

如上,红色注释的那一行会报错。但是把它改为显示this.a的值则可以正常运行,感觉理解不了。。。。这大概和没弄清Java的继承机制有关吧,求大家指导下


作者: Jason.Wong    时间: 2016-6-13 18:46
父类里是无法访问到子类里的成员变量和方法的(但是用反射可以做到),上面这样写编译就过不了,c是子类里的成员变量,而你访问的语句this.c是在父类的构造代码块里
作者: 我是你岁哥❤环    时间: 2016-6-13 19:00
c是定义在子类中的成员变量, 父类里是无法访问到子类里的成员变量和方法的
作者: tianzhu2725    时间: 2016-6-13 19:37
楼上说的很详细




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