Java 不同包中受保护变量的角色和访问级别
根据我的理解规则和受保护变量的访问级别:Java 不同包中受保护变量的角色和访问级别,java,oop,Java,Oop,根据我的理解规则和受保护变量的访问级别: 如果是同一个包裹 class A { protected int =200; } class B extends A { class D extends A { System.out.print(a.i); B是B的ref变量 B.i覆盖B类中i的值 b.i = 400; a是a的ref变量 a、 我将永远打印200 } class C extends B { }
如果是同一个包裹
class A {
protected int =200;
}
class B extends A {
class D extends A {
System.out.print(a.i);
B是B的ref变量B.i覆盖B类中i的值
b.i = 400;
a是a的ref变量a、 我将永远打印200
}
class C extends B {
}
c是c的ref变量
c、 i重写c类中i的值
c.i = 500;
a是a的ref变量
a、 我将永远打印200
}
class C extends B {
}
结论:A类受保护成员在所有类别的同一包中公开
如果不同的软件包使用一个这里A和D不在同一个包中
class A {
protected int =200;
}
class B extends A {
class D extends A {
System.out.print(a.i);
上述语句将抛出编译时错误此处a.i不可访问,我现在在a中是私人的
您只能将i与ref变量D一起使用
System.out.print(d.i);
//no error
}
class E extends D {
System.out.print(a.i);
上述语句将抛出编译时错误这里a.i是不可访问的,我现在在a.i是私人的
System.out.print(d.i);
上述语句将抛出编译时错误这里无法访问d.i,我现在是d.i的私人 您只能将i与ref变量E一起使用
System.out.print(e.i);
无误
}
结论:类A的受保护成员在其直接子类的其他包中充当私有变量
有人能给我更多关于受保护变量访问级别的详细信息吗 你试过了吗,这对受保护的修饰符的用法给出了相当好的解释
protected修饰符指定成员只能在其自己的包内访问(与包private一样),此外,还可以由另一个包中其类的子类访问
或者,如果您有问题,但仍然有一些问题,请详细说明。阅读此链接,您将找到您的答案
创建一些getter和setter来在其他子类中使用变量,或者使用this.i来访问变量i。只要。。。一些随机的细节?除了与实际问题无关之外,您的问题太广泛了。Marko-我的问题非常简单:)我只是想知道受保护变量包的访问级别。如果您的问题很简单,请明确说明
有人能给我更多关于受保护变量访问级别的详细信息吗?
不是一个明确而简单的问题,这是一个对非重点贡献的一般要求。Solar-感谢官方java教程链接。我的问题是为什么受保护的成员在另一个包的子类中是私有的。我们只能通过子类的ref变量而不是实际类的ref变量来访问子类中的受保护变量。好吧,您可以通过从子类直接访问父类的受保护变量(即使这些类不共享同一个包),这是继承的一个方面。当您像这样访问变量时:System.out.print(a.i)代码>你做错了。如果出于某种原因需要通过父级引用使用变量,则应将变量设置为静态:System.out.print(A.i)
或者只是像这样使用这个关键字。我回答你的问题了吗?