Oracle留档(在下面的链接)说:
非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的。
但在下面的示例中,我创建了一个对象objin
(内部类),它无法访问其封闭外部类的任何方法或变量。下面是代码,你能解释一下吗?
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
package Package_1;
public class Outer {
int k;
public void Multiply()
{
System.out.println("inside outer class' method multiply");
}
public class Inner {
int l;
public void Division()
{
System.out.println("inside inner class' method Divison");
}
}
}
使用Main方法初始化
package Package_1;
public class D {
public static void main(String[] args) {
Outer objout = new Outer();
objout.k = 5;
objout.Multiply();
Outer.Inner objin = objout.new Inner();
objin.l = 7;
objin.Division();
}
}
对于objin
对象,我无法访问其封闭类中的Multiple
方法。
文档并没有说您可以通过引用内部类来访问外部类的字段和方法。所以你不能这么做
objin.Multiply();
因为乘不是一种内在的方法。您可以做的是:
public class Inner {
int l;
public void Division()
{
System.out.println("I can access the field k in outer: " + k);
System.out.println("I can access the method Multiply in outer (even if Multiply was private): ");
Multiply();
// which is a shortcut for
Outer.this.Multiply();
}
}
PS:请遵守Java命名约定。方法以小写字母开头。
这就是规范所说的
public class Outer{
private int x;
private void method(){
}
public void publicMethod(){}
public class Inner{
//has access to even private properties of x
method(); //can be called
//NOTE: Only has ACCESS and does not INHERIT those methods
}
}
您尝试的是使用internal
实例访问publicMethod()
,该实例没有任何该名称的方法。
克鲁斯:
非静态嵌套类只能访问容器类的所有属性和方法,但不能继承这些方法。
〈代码〉客观。Multiply()不能工作,因为症结解释了Multiply()
是在外层
而不是内部
上定义的,所以在内部
上没有方法Multiply()
从非静态嵌套类(内部类)的代码中,您可以访问封闭类的公共成员和私有成员。
这就是您在尝试执行objin时的想法。Multiply()
:您正在访问Multiply(),就好像它是内部类的成员一样,但它不是。请记住,您可以从内部类的代码中看到它,但它不会像是您的一样被公开。
本文向大家介绍深入理解Java嵌套类和内部类,包括了深入理解Java嵌套类和内部类的使用技巧和注意事项,需要的朋友参考一下 一、什么是嵌套类及内部类 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。嵌套类从JDK1.1开始引入。其中inner类
问题内容: Go支持在函数内部嵌套结构,但除了lambda之外没有嵌套函数,这是否意味着无法在函数内部定义嵌套类? 因此,类在函数内部被削弱感到有点奇怪。 有什么提示吗? 问题答案: 实际上,无论您要声明 带有 接收器还是 不 带有接收器的函数都没有关系:不允许在Go中嵌套函数。 尽管您可以使用函数文字来实现以下目的: 在这里,我们创建了一个具有函数类型的变量,并将其分配给另一个函数。调用“外部”
问题内容: 我正在为新网站构建 用户类 ,但是这次我在考虑构建它有点不同… C ++ , Java 甚至 Ruby (可能还有其他编程语言)都允许在主类内部使用嵌套/内部类,这使我们可以使代码更加面向对象和组织化。 在PHP中,我想这样做: 这在PHP中可行吗?我该如何实现? 更新 如果不可能,将来的PHP版本是否会支持嵌套类? 问题答案: 介绍: 嵌套类与其他类的关系与外部类略有不同。以Java
JVM为内部类成员和方法分配空间的方式有什么不同吗。请提供所有可用类型的嵌套类(静态、本地、非静态、匿名)在此上下文中的区别。我从其他各种渠道寻找,但没有弄清楚。
使用Laravel 5.6,我试图从MySQL类别表中显示子类别的子类别。我想传递这个名字,并获得它的所有子类,而不管父类是什么。 类别表 期望结果 return App\Category::where('name','Child-1-P-2'))-
目标 了解如何定义嵌套类和何时适合使用它们 了解使用嵌套类的副作用 了解 new 运算符在嵌套类中的特殊用法 了解如何和何时使用静态内部类和匿名内部类 在何处使用嵌套类 顾名思义,嵌套类(或内部类) 是在一个类中定义的另一个类。 public class EnclosingClass { . . . public class NestedClass { . . . } } 像成