返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #49323同步于 2016/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]Java中子类能继承父类的成员变量吗?
dongqing
2016/4/14镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
java访问权限修饰符(特殊情况除外)
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendl √ √ × ×
private √ × × ×
应该是这样吧?
【 在 dongqing (dongqing) 的大作中提到: 】
继承还是访问?访问的话是楼上的,继承我记得是只能维持或者缩小作用域而不能扩大作用域,
“子类都会拥有父类中的任何类型的成员变量不论是私有公有保护还是默认或者是静态非静态。但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的protected、public方法来访问(其实就是private没继承)。”
写个小实验就知道了~~不过在JVM上究竟是为什么,还求大神指导
其实还是都继承了,private也是继承了,只是访问还是受修饰符限制?
【 在 qw123 的大作中提到: 】
: 继承还是访问?访问的话是楼上的,继承我记得是只能维持或者缩小作用域而不能扩大作用域,
: “子类都会拥有父类中的任何类型的成员变量不论是私有公有保护还是默认或者是静态非静态。但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的protected、public方法来访问(其实就是private没继承)。”
: 写个小实验就知道了~~不过在JVM上究竟是为什么,还求大神指导
package zq.test;
public class Test {
public static void main(String[] args) {
A a = new B();
System.out.println(a.i);
B b = (B) a;
System.out.println(b.i);
}
}
class A{
public int i=4;
}
class B extends A{
public int i = 5;
}
输出
4
5
这能说明什么问题?脑子有点乱。
A.i与B.i不是一个i
这么理解就好
【 在 dongqing 的大作中提到: 】
: package zq.test;
:
:
: public class Test {
:
: public static void main(String[] args) {
: .........
发自「贵邮」
继承,不管访问权限是啥~
只是private的method和field在子类不可见,但是可以通过反射这种东西拿到private修饰的东西
发自「贵邮」
应该是这么回事,所有superclass的变量都存在,subclass继承的时候复制了一份作为自己的局部变量,superclass的还在
所以即使用的是new B(), 只要a的类型是A,还是会使用A的变量值
【 在 dongqing 的大作中提到: 】
: package zq.test;
:
: public class Test {
: ...................