习题1
package com.liu10;
public class B extends A {
public int a=8;
public void test(){a+=5;}
public static void main(String[] args) {
// TODO Auto-generated method stub
A b = new B();
b.test();
System.out.println(b.a);
}
}
class A {
public int a=5;
public void test(){a+=3;}
}
main方法中输出b.a = 5 原因是属性并没有多态,当执行 A b = new B()后,
b中其实包含两个a属性 a(A)=5,a(B)=8
执行b.test()时由于多态实际执行子类的test方法,执行后a(A)=5,a(B)=13
习题2
package com.liu10;
public class C {
void m1(){}
protected void m2(){}
}
//范围由大到小public>protected>default>private
class D extends C{
public void m1(){} //OK
//protected void m1(){} //OK
//void m1(){} //OK
//private void m1(){} //NG
public void m2(){} //OK
//protected void m2(){} //OK
//void m2() //NG
//private void m2(){} //NG
}
子类覆盖父类方法时,只能比父类声明的访问限制范围要大
范围由大到小public>protected>default>private