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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋旭东 中级黑马   /  2013-7-2 22:52  /  1101 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Super{
        int i=0;
        public Super(String a){
                System.out.println("A");
                i=1;
        }
        public Super(){
                System.out.println("B");
                i+=2;
        }
}
class Demo extends Super {
        public Demo(String a){
                super();
                System.out.println("C");
                i=5;
        }
        public static void main(String[] args) {
                int i=4;
                Super d=new Demo("A");
                System.out.println(d.i);

        }

}
变量i的值是怎么变化的,子类中的i与父类中的i是指的一个变量吗,子类是不是把父类的i也继承了,可以改变i的值

评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
其实这样的问题并不难,你只要在每个I后面加个输出测试一下I的变化值就好了.
  1. class Super{
  2. int i=0;
  3. public Super(String a){
  4. System.out.println("A");
  5. i=1;
  6. System.out.println("i="+i);
  7. }
  8. public Super(){
  9. System.out.println("B");
  10. i+=2;
  11. System.out.println("i="+i);
  12. }
  13. }
  14. class Demo999 extends Super {
  15. public Demo999(String a){
  16. super();
  17. System.out.println("C");
  18. i=5;
  19. System.out.println("i="+i);
  20. }
  21. public static void main(String[] args) {
  22. int i=4;
  23. Super d=new Demo999("A");
  24. System.out.println(i);
  25. System.out.println(d.i);

  26. }

  27. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 赞一个!

查看全部评分

回复 使用道具 举报
子类中的I和父类中的I不是一个变量,你这个子类中没有指定int i是什么访问权限啊,我是这么想的,子类继续的父类,但是子类只继承父类的公有部分,同时你想想子类不可以调用父类的私有方法吧。
回复 使用道具 举报
private 的属性和方法是不能被继承的。能继承public,default,protected 的属性和方法。所以此程序中子类继承了父类的属性i,子类中的i与父类中的i不是同一个i,但是子类中的i是从父类继承过来的,i 的值从0变成2再变成5,其实子类的构造方法中隐藏了一个this关键字,就是this.i=5,谁调用的它改变的就是谁的i 的值,显然是身为Super类型的d所指的对象调用的,所以改变的是身为Super类型的d的属性i 的值,所以最后输出的是d.i,这时的d是Super类型的,所以值就为5了

评分

参与人数 1黑马币 +2 收起 理由
张勇1993 + 2 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马