内部类

内部类(当作类中的一个普通成员变量,只不过此成员变量是class的变量类型)

            一个java文件中可以包含多个类,但是只能有一个public class。

           如果一个类定义在另一个类的内部,此时可以称之为内部类。

 1 public class Demo{
 2     private int id;
 3     private String name;
 4     public void test(){
 5         System.out.println("test");
 6     }
 7     
 8     class InnerClass{
 9         private int age;
10         public void show(){
11             System.out.println("show");
12         }
13     }
14 }
InnerClass

使用:外部类.内部类 内部类名 = new 外部类().new 内部类();

1 public class TestInner{
2     public static void main(String agrs[]){
3         Demo.InnerClass inner = new Demo().new InnerClass();
4         inner.show();
5     }
6 }
TestInner

特点:内部类可以方便的使用外部类的私有属性;

           外部类不能访问内部类的私有属性,但是如果创建了内部类的对象,此时可以在外部类中访问私有属性;

           内部类中不能定义静态属性;

           当内部类和外部类具有相同的私有属性时,在内部类访问时,可直接访问内部类的私有属性,要想访问外部类时需要  外部类.this.属性名

 1 package com.test.InnerClass;
 2 
 3 public class Demo {
 4     private int id=1;
 5     private String name="tom";
 6     private int age;
 7     public void test(){
 8         System.out.println("test");
 9         InnerClass inner = new InnerClass();
10         System.out.println("不能直接调用内部类私有属性,可以通过创建内部类对象调用age:"+inner.age);
11     }
12 
13     class InnerClass{
14         private int age=15;
15         public void show(){
16             System.out.println("show");
17             System.out.println("直接调用外部类id:"+id);
18             test();
19             System.out.println("内部类age:"+age);
20             System.out.println("外部类age:"+Demo.this.age);
21         }
22     }
23 }
InnerClass01

分类(重要):1、匿名内部类。

                                当定义一个类,实现了某个接口时,在使用过程中只需要使用一次,没有其他用途,再考虑到代码的简洁,可以不特意创建一个类,而使用new interface(){(实现未实现的方法)},就叫匿名内部类。

                              

           2、静态内部类。

                                 在内部类中可以定义静态内部类,使用static关键字修饰,使用规则  外部类.内部类 内部类名字 = new 外部类.内部类();

 1 package com.test.InnerClass;
 2 
 3 public class Demo01 {
 4     private int id;
 5     public void test(){
 6         System.out.println("test");
 7     }
 8 
 9     public static void main(String[] args) {
10         Demo01.InnerClass01 inner = new Demo01.InnerClass01();
11         inner.show();
12     }
13 
14     static class InnerClass01{
15         private int age;
16         public void show(){
17             System.out.println("static内部类的show");
18         }
19     }
20 }
staticInnerClass

           3、方法内部类

                                 在外部类的方法中也可以定义内部类(作为了解),使用时需要注意,只能在方法中创建对象,因为此class的作用域就是该方法。

 1 package com.test.InnerClass;
 2 
 3 public class Demo01 {
 4     private int id;
 5     public void test(){
 6         System.out.println("test");
 7         class InnerClass03{
 8             private int age;
 9             public void show(){
10                 System.out.println("方法内部类的show");
11             }
12         }
13         InnerClass03 inner = new InnerClass03();
14         inner.show();
15     }
16 }
methodInnerClass
 1 package com.test.InnerClass;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5 //        Demo.InnerClass inner = new Demo().new InnerClass();
 6 //        inner.show();
 7 
 8         Demo01 demo01 = new Demo01();
 9         demo01.test();
10     }
11 }
Test
原文地址:https://www.cnblogs.com/bentuzi/p/12622953.html