内部类

在一个类的内部的类,内部类最大优点,可以方便的访问外部类的私有方法

  • 实例化内部类时,必须先实例化外部类,如果内部类时private修饰,那么不能通过这种方式实例化,必须在外部类里面处理

    1. public static void main(String [] args){
    2. Ounter.Inner inner = new Outer().new Inner();
    3. inner.print();
    4. }
  • 内部类访问外部类属性实例

    1. class Outer{
    2. private String name = "hello";
    3. class Inner {//内部类
    4. public void print(){
    5. //访问外部私有属性
    6. System.out.println(name);
    7. }
    8. }
    9. public void printOut(){
    10. new Inner().print();
    11. }
    12. }
    13. public class TestInner{
    14. public static void main(String [] args){
    15. Outer outer = new Outer();
    16. outer.printOut();
    17. }
    18. }
  • 外部类直接访问内部类私有属性

    1. class Outer{
    2. private String name = "hello";
    3. class Inner {//内部类
    4. private String info = "你好!";
    5. public void print(){
    6. System.out.println(name);
    7. }
    8. }
    9. public void printOut(){
    10. //通过外部类的方法访问内部类的私有属性
    11. System.out.println(new Inner().info);
    12. }
    13. }
    14. public class TestInner{
    15. public static void main(String [] args){
    16. Outer outer = new Outer();
    17. outer.printOut();
    18. }
    19. }

static 内部类

访问 方式 Outer.Inner inner = new Outer.Inner();

  1. class Outer{
  2. private static String name = "hello";
  3. static class Inner {//内部类
  4. public void print(){
  5. System.out.println(name);
  6. }
  7. }
  8. }
  9. public class TestInner{
  10. public static void main(String [] args){
  11. Outer.Inner inner = new Outer.Inner();
  12. inner.print();
  13. }
  14. }

方法内部类

在jdk1.8之前,方法内部类需要访问方法的属性,必须把方法定义为final int num。

  1. class Outer{
  2. private static String name = "hello";
  3. public void print(int num){
  4. int numa = 100;
  5. class Inner {//方法内部类
  6. public void print(){
  7. System.out.println(Outer.this.name);
  8. System.out.println("方法内部类方法属性:"+numa);
  9. System.out.println("方法内部类方法参数:"+num);
  10. }
  11. }
  12. new Inner().print();
  13. }
  14. }
  15. public class TestInner{
  16. public static void main(String [] args){
  17. Outer outer = new Outer();
  18. outer.print(50);
  19. }
  20. }
  21. //结果
  22. //hello
  23. //方法内部类方法属性:100
  24. //方法内部类方法参数:50