我面对java内部类,我在外部变量可见性方面遇到了一些麻烦。
class A {
private int x = 5;
class B extends A{
public void fun(B b){
b.x = 10; //here
}
}
}
如果内部和外部类之间没有可见性限制,为什么我不能做这样的事情(见“这里”标签)?我真的不理解这些规则。
你需要知道这三个私有
的,受保护的
,默认
的,公共
访问说明符
私有
变量只能在自身中修改class.not包括子类
默认
变量可以在同一个包中修改。protected
变量可以在子类中修改,也可以在同一个包和它本身中修改公共
变量可以在任何地方修改。你可以在这个链接上看到
beside.if您使用此示例,这可以通过使用Super
说明符来修改您的变量以访问您的可见
class A {
private int x = 5;
class B extends A{
public void fun(B b){
b.x = 10; //here error
super.x=1;//this is ok
}
}
}
这个 b.x = 10; //这里错误
这个问题是 b 是方法的parm,而不是成员变量或超类变量。
修饰符<code>private
class A {
private int x = 5; // The issue is in `private` in this line
class B extends A{
public void fun(B b){
b.x = 10; //here
}
}
}
如果您移除修饰符< code>private并将其更改为< code>default 、< code>public或< code>protected,您将能够访问该变量。
请浏览链接以更好地理解。
更新:
删除 extends 关键字(现在类 B 将不再是子类,而只是一个内部类),变量 x 将仅使用此 OR 超级关键字进行访问。用法在链接中详细说明
在您的示例中,成员变量< code>x不是类B的属性,因此< code>b.x = 10不生成sesne,因此出现错误,这与可见性规则无关。尝试< code>x = 10工作正常,这是< code>A.this.x = 10或< code>super.x = 10的快捷方式。
问题内容: 考虑以下情况: 从Eclipse中的警告中,我引用:Java编译器通过合成访问器方法模拟构造函数AB()。我想编译器现在可以继续进行,并为B创建一个额外的“水下”构造函数。 我觉得这很奇怪:为什么类B在A的ako字段中不可见?并且:这是否意味着B类在运行时不再是私有的?并且:为什么B类的protected关键字表现不同? 问题答案: 内部类本质上是Java 1.1中引入的一种hack。
问题内容: 我正在Kotlin中开发一个Android 密码库。我有几个类在Java应用程序中公开可见。在文档中找到了这一点。 声明成为Java。类的成员会经历名称重整,以使其更难从Java中意外使用它们,并允许重载具有相同签名但根据Kotlin规则彼此不可见的成员。 有办法解决这个问题吗? 问题答案: 我已经看到您所有的内部类都涉及加密和解密。 您可以通过定义一个顶级函数并将其标记为 ,然后将E
假设您正在编写一个Android项目(不是库)。所有文件都编译在一起,因此......在这种情况下使用可见性修饰符有任何意义吗?
前言 内容不多,希望这些常见的一些原理性问题可以帮助有需要的人。 Handler机制和底层实现 Handler、Thread和HandlerThread的差别 handler发消息给子线程,looper怎么启动? 关于Handler,在任何地方new Handler 都是什么线程下? ThreadLocal原理,实现及如何保证Local属性? 请解释下在单线程模型中Message、Handler、
问题内容: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为public或protected或package- private确实没有区别,对吗?那么我应该使用哪个,或者什么时候该使用呢?我有点困惑。 问题答案: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为p
我必须在Java中实现一个名为的接口。 假设是我编写的实现graph的类。 我想创建一个内部类以便“封装”类型的元素。 问题是我不明白内部类应该是还是、还是以及它的实例变量应该声明为还是。对于我将要在中插入的一些最终方法也是如此。 基本上,类节点应该像C语言中的记录类型(带有),并且外部类应该能够访问节点的所有实例变量,而不需要观察器、getter等。