java内部类的定义_java定义内部类
package test.jdk;
public class InnerTest {
private String instAtt = "實例變量";
private static String staticAtt = "靜態變量";
public void test() {
int methodAtt = 1;
final int methodFinalAtt = 2;
// 非靜態方法里的內部類
class staticMethodInnerClass {
@Override
public String toString() {
// 非靜態方法里無法訪問實例的外部變量
System.out.println("非靜態方法的內部類可以訪問外部類的實例變量:" + instAtt);
System.out.println("非靜態方法的內部類可以訪問外部類的靜態變量:" + staticAtt);
// 非靜態方法里無法訪問方法的非final的變量
// System.out.println(methodAtt);
System.out.println("非靜態方法的內部類可以訪問方法的final變量:" + methodFinalAtt);
return "my nickname is white";
}
}
new staticMethodInnerClass().toString();
new Object() {
@Override
public String toString() {
System.out.println("非靜態方法的匿名內部類可以訪問外部類的實例變量:" + instAtt);
System.out.println("非靜態方法的匿名內部類可以訪問外部類的靜態變量:" + staticAtt);
//靜態方法里匿名內部類無法訪問方法的非final的變量
// System.out.println(methodAtt);
System.out.println("非靜態方法的匿名內部類可以訪問方法的final變量:" + methodFinalAtt);
return "我是匿名內部類";
}
}.toString();
}
public static void main(String blackbat[]) {
int methodAtt = 1;
final int methodFinalAtt = 2;
//靜態方法里的內部類
class staticMethodInnerClass {
@Override
public String toString() {
//靜態方法里無法訪問實例的外部變量
// System.out.println(instAtt);
System.out.println("靜態方法的內部類可以訪問外部類的靜態變量:" + staticAtt);
//靜態方法里無法訪問方法的非final的變量
// System.out.println(methodAtt);
System.out.println("靜態方法的內部類可以訪問方法的final變量:" + methodFinalAtt);
return "my nickname is white";
}
}
new staticMethodInnerClass().toString();
new Object() {
@Override
public String toString() {
//靜態方法的匿名內部類不能訪問外部類的非靜態變量
// System.out.println("非靜態方法的匿名內部類可以訪問外部類的非靜態變量:" + instAtt);
System.out.println("非靜態方法的匿名內部類可以訪問外部類的靜態變量:" + staticAtt);
//靜態方法里匿名內部類無法訪問方法的非final的變量
// System.out.println(methodAtt);
System.out.println("非靜態方法的匿名內部類可以訪問方法的final變量:" + methodFinalAtt);
return "我是匿名內部類";
}
}.toString();
new InnerTest().test();
// 建立靜態內部類(static Inner Class)的對象
ImOutClass.StaticInnerClass staticIC = new ImOutClass.StaticInnerClass();
staticIC.access();
/*
* 建立非靜態內部類(non-static Inner Class)的對象.
注意這種建立對象的格式 首先創建外部類的對象 然后使用對象.new 來創建。
*/
ImOutClass outC = new ImOutClass();
ImOutClass.InstInnerClass inC = outC.new InstInnerClass();
inC.access();
}
}
class ImOutClass {
private static String staticAtt = " 外部類的類變量 ";
private String instAtt = " 外部類的實例變量 ";
private static String xx = "外部靜態變量";
// private String xx = "外部類的實例變量";
// 外部類的非靜態方法
public void instanMethod() {
System.out.println(" 和外部類實例方法 ");
}
// 外部類的靜態方法
public static void staticMethod() {
System.out.println(" 和外部類靜態方法 ");
}
//靜態內部類(static Inner Class)
public static class StaticInnerClass {
public StaticInnerClass() {
System.out.println(" 我是靜態內部類 ");
}
public void access() {
System.out.println(" 我可以訪問 " + staticAtt);
staticMethod();
System.out.println(" 我可以訪問外部的靜態變量 " + xx);
// 非靜態的方法 instanMethod() 無法從靜態的地方使用
// instanMethod(); }
}
// 非靜態內部類(non-static Inner Class)
public class InstInnerClass {
public InstInnerClass() {
System.out.println(" 我是成員級內部類,非靜態內部類");
}
public void access() {
System.out.println(" 我可以訪問 " + instAtt);
instanMethod();
staticMethod();
System.out.println(" 我可以訪問外部的靜態變量 " + xx);
}
}
}
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java内部类的定义_java定义内部类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 验证码生成java_JAVA-验证码生成
- 下一篇: java万法_Java内省机制和 Bea