JAVA基础---认识内部类
Posted 一位懒得写博客的小学生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA基础---认识内部类相关的知识,希望对你有一定的参考价值。
实例内部类
实例化内部类对象
public class OutClass {
public int val1;
public int val;
class InnerClass {
public int val3;
public int val4;
}
public static void main(String[] args) {
OutClass out = new OutClass();
OutClass.InnerClass inner = out.new InnerClass();
}
}
public class OutClass {
public int val1 = 1;
public int val2 = 2;
public void fun() {
System.out.println("OutClass");
System.out.println(val1);
System.out.println(val2);
}
class InnerClass {
public int val3 = 3;
public int val4 = 4;
public void func(){
System.out.println("InnerClass");
System.out.println(val3);
System.out.println(val4);
//内部类可以调用外部类的成员属性和成员方法
System.out.println(val1);
System.out.println(val2);
System.out.println("-----------------");
fun();
}
}
public static void main(String[] args) {
OutClass out = new OutClass();
OutClass.InnerClass inner = out.new InnerClass();
inner.func();
}
}
//执行结果
InnerClass
3
4
1
2
-----------------
OutClass
1
2
在实例内部类中不能定义静态成员属性
如果非要定义,则
public class OutClass {
public int val1 = 1;
public int val2 = 2;
class InnerClass {
public int val1 = 11;
public int val3 = 3;
public int val4 = 4;
public void func(){
System.out.println("InnerClass");
System.out.println(val1);
System.out.println(this.val1);
System.out.println(OutClass.this.val1);
}
}
public static void main(String[] args) {
OutClass out = new OutClass();
OutClass.InnerClass inner = out.new InnerClass();
inner.func();
}
}
//实例内部类实际上拥有2个this,一个是实力内部类自己的,一个是外部类的
//执行结果
InnerClass
11
11
1
静态内部类
public class OutClass {
public static int val1 = 1;
public int val2 = 2;
static class InnerClass {
public int val3 = 3;
public int val4 = 4;
public void func(){
System.out.println("InnerClass");
System.out.println(val3);
System.out.println(val4);
System.out.println("---------");
System.out.println(val1); //此时调用外部类的属性需要加static
//System.out.println(val2); //在静态内部类当中,不可以访问外部类的非静态成员,外部类的非静态成员是依赖于外部对象的。
}
}
public static void main(String[] args) {
OutClass.InnerClass inner = new OutClass.InnerClass();
inner.func();
}
}
//执行结果
InnerClass
3
4
---------
1
//如果非要访问外部类非静态成员
public class OutClass {
public static int val1 = 1;
public int val2 = 2;
static class InnerClass {
public int val3 = 3;
public int val4 = 4;
public OutClass out;
public InnerClass(OutClass out) {
this.out = out;
}
public void func(){
System.out.println("InnerClass");
System.out.println(val3);
System.out.println(val4);
System.out.println("---------");
System.out.println(val1);
System.out.println(out.val2);
}
}
public static void main(String[] args) {
OutClass out = new OutClass();
OutClass.InnerClass inner = new OutClass.InnerClass(out);
inner.func();
}
}
//执行结果
InnerClass
3
4
---------
1
2
匿名内部类
public class OutClass {
public static int val1 = 1;
public int val2 = 2;
public void func() {
System.out.println("hello");
}
public static void main(String[] args) {
new OutClass(){
@Override //重写外部类func方法
public void func() {
super.func();
System.out.println(val1);
System.out.println(val2);
}
}.func();
}
}
//执行结果
hello
1
2
以上是关于JAVA基础---认识内部类的主要内容,如果未能解决你的问题,请参考以下文章