首页 > 编程语言 > 详细

Java继承中的"陷阱"问题

时间:2015-12-02 02:08:22      阅读:239      评论:0      收藏:0      [点我收藏+]

对于大都数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();
        System.out.println(a);
        B b = new B();
        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方法进行间接访问,私有方法可以利用反射机制进行间接访问。

?

下面是调试和运行结果:
bubuko.com,布布扣
?


bubuko.com,布布扣
?

?

?

Java继承中的"陷阱"问题

原文:http://xieke90.iteye.com/blog/2260799

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!