Java继承中的"陷阱"问题
2015-12-01 13:46
465 查看
对于大都数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.comhttps://blog.csdn.net/blog/2260799
相关文章推荐
- Java继承需要注意的几个问题
- Java语言深入-构造函数的继承问题-Java基础-Java-编程开发
- 使用myeclipse开发java,解决java中继承JFrame类出现The type JFrame is not accessible due to restriction的问题
- JAVA中关于继承和隐藏的一个另类问题。
- java类继承Serializable后生成serialVersionUID产生的奇怪问题(转)
- java学习笔记(五)——继承多态及类的转换问题
- Java 中继承了父类的一些问题、String.CopyTo方法的具体用法
- 编程需要注意的陷阱:Java继承是有害的
- 切勿调入Java继承的陷阱
- 问题一:java中的继承总结
- java接口中多继承的问题
- java继承的权限问题
- Java继承后子父类的初始化化问题
- Java小程序---接口中抽象方法的实现(解决了JAVA语言不能多继承的问题)
- Java中关于构造函数继承的相关问题
- JAVA中的静态方法和非静态方法的继承覆盖问题
- java异常捕捉陷阱(内存泄漏,finally块,catch块,继承得到的异常)
- java 中 static 方法 的继承问题
- JAVA在类继承中类成员变量“重写”的问题
- 再探java成员在继承时初始化的相关问题