Java继承中的"陷阱"问题


对于大都数Java初学者认为:子类可以继承父类中访问权限设定为public 、protected、default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。其实这个一个误区,下面来根据例子分析一下:

 

    父类代码:

public class A
{
private String a;
private String b;
private String c;

public A()
{
setA("a");
setB("b");
setC("c");
}

public String getA()
{
return a;
}

public void setA(String a)
{
this.a = a;
}

public String getB()
{
return b;
}

public void setB(String b)
{
this.b = b;
}

public String getC()
{
return c;
}

public void setC(String c)
{
this.c = c;
}

@Override
public String toString()
{
return "A [a=" + a + ", b=" + b + ", c=" + c + "]";
}

}

   子类代码:

public class B extends A
{
public B()
{
setA("A");
setB("B");
setC("C");
}

@Override
public String toString()
{
return "B [a=" + getA() + ", b=" + getB() + ", c=" + getC() + "]";
}
}

   测试代码:

public class Test
{

public static void main(String[] args)
{
A a = new A();
B b = new B();
System.out.println(a);
System.out.println(b);
}

}

   看完上面代码你认为结果是怎样的呢?

    A [a=A, b=B, c=C]

    B [a=A, b=B, c=C]

    或

    A [a=a, b=b, c=c]

    B [a=A, b=B, c=C]

 

    正确答案是:

    A [a=a, b=b, c=c]

    B [a=A, b=B, c=C]

 

原因:子类可以继承父类中除构造方法以外的所有方法和属性,只是私有的方法和属性都不能直接访问(相当于隐式继承),但是可以间接访问,如私有属性可以通过get、set方法进行间接访问,私有方法可以利用反射机制进行间接访问。

 

下面是调试和运行结果:


 
 

 



 

 

 


本站声明
本文转载自:http://xieke90.iteye.com/blog/2260799     作者:xieke90     发布日期:2015-12-01     本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。


 
© 2014-2016 ITdaan.com 粤ICP备14056181号