Java内部类成员类是指在一个类中定义的另一个类,它可以访问外部类的所有成员,包括私有成员。内部类可以被声明为public、protected、private和包访问权限。
内部类可以有多个实例,而不影响外部类的实例。这使得内部类能够独立于外部类而存在,并具有自己的特性和行为。此外,内部类还可以访问其外围作用域中的数据,这使得它们能够更好地封装对象的信息。
Java内部类成员分为四大类:静态内部类、非静态内部类、匿名内部类和嵌套内部类。
// 静态内部类 public class OuterClass { static class StaticInnerClass { public void doSomething() { System.out.println("Static Inner Class"); } } }
// 非静态内部类 public class OuterClass { class NonStaticInnerClass { public void doSomething() { System.out.println("Non-Static Inner Class"); } } }
内部类可以访问其所有实例成员,实例字段和其封闭类的实例方法。
class Outer { private int value = 2014; public class Inner { public void printValue() { System.out.println("Inner: Value = " + value); } } // Inner class ends here public void printValue() { System.out.println("Outer: Value = " + value); } public void setValue(int newValue) { this.value = newValue; } } public class Main { public static void main(String[] args) { Outer out = new Outer(); Outer.Inner in = out.new Inner(); out.printValue(); in.printValue(); out.setValue(2015); out.printValue(); in.printValue(); } }
上面的代码生成以下结果。
以下代码显示如何访问内部类的内部变量。
public class Main { public static void main(String[] args) { Outer out = new Outer(); Outer.Inner in = out.new Inner(); out.printValue(); in.printValue(); out.setValue(3); out.printValue(); in.printValue(); } } class Outer { private int value = 1; public class Inner { private int value = 2; public void printValue() { System.out.println("Inner: Value = " + value); } } // Inner class ends here public void printValue() { System.out.println("Outer: Value = " + value); } public void setValue(int newValue) { this.value = newValue; } }
上面的代码生成以下结果。
以下代码显示如何在内部类中使用关键字this。
class Outer { private int value = 1; class QualifiedThis { private int value = 2; public void printValue() { System.out.println("value=" + value); System.out.println("this.value=" + this.value); System.out.println("QualifiedThis.this.value=" + QualifiedThis.this.value); } public void printHiddenValue() { int value = 2; System.out.println("value=" + value); System.out.println("this.value=" + this.value); System.out.println("QualifiedThis.this.value=" + QualifiedThis.this.value); } } public void printValue() { System.out.println("value=" + value); System.out.println("this.value=" + this.value); } } public class Main { public static void main(String[] args) { Outer outer = new Outer(); Outer.QualifiedThis qt = outer.new QualifiedThis(); System.out.println("printValue():"); qt.printValue(); System.out.println("printHiddenValue():"); qt.printHiddenValue(); outer.printValue(); } }
上面的代码生成以下结果。
如果实例变量名称被隐藏,您必须使用关键字this或类名称以及关键字this限定其名称。
class TopLevelOuter { private int v1 = 100; // Here, only v1 is in scope public class InnerLevelOne { private int v2 = 200; // Here, only v1 and v2 are in scope public class InnerLevelTwo { private int v3 = 300; // Here, only v1, v2, and v3 are in scope public class InnerLevelThree { private int v4 = 400; // Here, all v1, v2, v3, and v4 are in scope } } } }
以下代码显示如何从外部类引用变量。
public class Test{ private int value = 1; public class Inner { private int value = 2; public void printValue() { System.out.println("Inner: Value = " + value); System.out.println("Outer: Value = " + Test.this.value); } } // Inner class ends here public void printValue() { System.out.println("nOuter - printValue()..."); System.out.println("Outer: Value = " + value); } public void setValue(int newValue) { System.out.println("nSetting Outer"s value to " + newValue); this.value = newValue; } }
Java面向对象的设计 -Java继承隐藏方法隐藏类从其超类继承所有非私有静态方法。重定义类中继承的静态方法称为方法隐藏。子类中的...
Java数据类型教程 -Java字符串转换String类有一个重载的valueOf()静态方法来获取任何原始数据类型或任何对象的值的字符串表示。...
JavaFX教程 -JavaFX HBoxJavaFX API具有将UI控件显示到场景图上的布局类。HBox布局类将JavaFX子节点放在水平行中。新的子节点附...
JavaFX教程 -JavaFX手势事件JavaFX可以处理来自触摸使能设备的触摸和手势的事件。手势和触摸事件支持触摸启用设备的以下事件手势...
Java 实例 - 利用堆栈将中缀表达式转换成后缀表达式 Java 实例以下实例演示了如何使用堆栈进行表达式的堆栈将中缀(Infix)表达...