黑马程序员技术交流社区

标题: 初学,继承问题 [打印本页]

作者: 宋旭东    时间: 2013-7-2 22:52
标题: 初学,继承问题
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的值
作者: 肥猫    时间: 2013-7-2 23:23
其实这样的问题并不难,你只要在每个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. }
复制代码




作者: lanbuohan    时间: 2013-7-2 23:55
子类中的I和父类中的I不是一个变量,你这个子类中没有指定int i是什么访问权限啊,我是这么想的,子类继续的父类,但是子类只继承父类的公有部分,同时你想想子类不可以调用父类的私有方法吧。
作者: 傲鸽    时间: 2013-7-3 00:30
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了




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