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.cnblogs.com/johnny/archive/2004/08/23/35849.aspx
      

  4.   

    private--类内部 default--类内部,同包无继承关系类,同包子类 protected--类内部,同包无继承关系类,同包子类,不同包子类 public-类内部,同包无继承关系类,同包子类,不同包子类,不同包无继承关系类 
      

  5.   

    如果子类构造器没有显示的调用超类的构造器,那么超类就会调用默认的构造器,如果超类没有默认的构造器,就会报错。
    虽然AB加的访问修饰符使得子类可以访问到,但是超类没有默认的构造器是不行的!
    看下边的代码:class mysuper{
    protected int a;
    public mysuper(int a){
    this.a=a;
    }
    public mysuper(){//添加默认构造器

    }
    }
    class sub extends mysuper{
    public sub(int a){
    this.a=a;
    }
    public sub(/*int a*/){
    //this(a)

    }
    }
      

  6.   

    sbfivwsll ,
    如果子类中没有特别写明,会自动调用父类无参的构造super()
    这句很值得学习啊