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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaobaosdu 中级黑马   /  2016-6-12 22:05  /  555 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的继承机制有关吧,求大家指导下

3 个回复

倒序浏览
父类里是无法访问到子类里的成员变量和方法的(但是用反射可以做到),上面这样写编译就过不了,c是子类里的成员变量,而你访问的语句this.c是在父类的构造代码块里
回复 使用道具 举报
c是定义在子类中的成员变量, 父类里是无法访问到子类里的成员变量和方法的
回复 使用道具 举报
楼上说的很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马