易错代码合集
一 多态类型
1
- 代码
public class Test{ public static void main(String[] args){ Base b1=new Base(); Base b2=new Sub(); } } class Base{ Base(){ method(100); } public void method(int i){ System.out.println("base:"+i); } } class Sub extends Base{ Sub(){ super.method(i); } public void method(int j){ System.out.println("sub:"+j); } }
- 输出答案
- base:100
- sub:100
- base:70
- 总结
- new 子类,在加载其父类时,如果父类所调用的自身的方法被其子类所重写了,那么此时调用的是子类所重写的方法
2
- 代码
public class Test{ public static void main(String[] args){ A c=new B(); c.setA(5); System.out.println(c.getA()); } } class A{ private int a; public void setA(int a){ this.a=a; } public void getA(){ return a; } } class B extends A{ private int a; public void setA(int a){ this.a=a; } }
- 输出答案
- 0
- 总结
- getter 和 setter 也算在了重写的范围内
3
-
代码
public class Test{ public static void main(String[] args){ Fu f=new Zi(); Fu z=new Zi(); System.out.println(f.num); System.out.println(z.num); f.show(); z.show(); } } class Fu{ int num=4; void show(){ System.out.println("show Fu"); } } class Zi extends Fu{ int num=5; void show(){ System.out.println("show Zi"); } }
-
输出答案
- 4
- 5
- show Zi
- show Zi
-
总结
- 以下结论成立在子类对象指向父类引用的情况下(保险起见,防止意外情况)
- 只能访问父类的属性
- 只能访问父类没被重写的方法
- 只能访问子类已经重写父类的方法
-
资料
资料 Java子类父类属性的覆盖(转载)