1. class Super {
2. private int a;
3. protected Super(int a) { this.a = a; }
4. }
.....
11. class Sub extends Super {
12. public Sub(int a) { super(a); }
13. public Sub() { this.a= 5; }
14. }
Which two, independently, will allow Sub to compile? (Choose two.)
A. Change line 2 to:
public int a;
B. Change line 2 to:
protected int a;
C. Change line 13 to:
public Sub() { this(5); }
D. Change line 13 to:
public Sub() { super(5); }
E. Change line 13 to:
public Sub() { super(a); }
答案是CD,我想知道关于变量继承方面的解释,知道的大哥们最好把变量继承的其他方面也说说,比如父类的属性是private的,子类中如何操作,如果父类的属性是public的,子类的对象通过.属性赋值以后父类的属性有什么变化,或者说说影响范围,很迷啊!请高手帮帮忙

解决方案 »

  1.   

    你可以简单的认为:
    private是不可以访问的,就是父亲自己的小金库;
    protected是给儿子的财产,儿子可以使用;
    public是随便访问的,是公共厕所,非直系亲属也可以用;
      

  2.   

    父类属性是private 可以在父类中提供get,set方法来操作私有的属性,
    父类没有无参的构造方法,
    如果子类中没有特别写明。会自动调用父类无参的构造super(),但是你这个父类没有无参的构造,super()编译不会通过。因此,第13行在ab答案下通不过e答案a是父类的私有属性,不能操作,如果把父类的属性改为公有或保护,e答案就正确了。
    c答案调用了this(5),默认的super()失效,而this(int a)里又调用了父类的带参构造,能通过编译,在D答案中调用了父类有参的构造能成功构造,如果没有写明,会默认一个无参的构造,但是你写了构造方法后就不会再有默认的构造出现了。
      

  3.   


    没时间了,给你个链接吧,自己看看
    http://www.javaeye.com/topic/180601