习题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
