Java基础学习:面向对象17(内部类)


Java基础学习:面向对象17

  • N种内部类:

    • 成员内部类

    • 静态内部类

    • 局部内部类

    • 匿名内部类

 

  • 内部类:

    • 内部类就是在一个类的内部再定义一个类,比如A类中定义一个B类,那么B类相对于A类来说就称为内部类,而A类相对于B类来说就是外部类

       

  • 成员内部类:

    • 成员内部类可以获取外部类的私有属性;

    • 代码案例:

      ?
      /**
      * 成员内部类:
      *
      */
      public class Outer {
      ?
         private int id=3;
      ?
         public void out(){
             System.out.println("这是外部类的方法");
        }
      ?
         public class Inner{
             public void in(){
                 System.out.println("这是内部类的方法");
            }
      ?
             //获得外部类的私有属性
             public void getId(){
                 System.out.println(id);
            }
        }
      ?
      }
      ?
      ?
      ?

       

  • 静态内部类:

    • 静态内部类:不能访问外部类中非静态方法和非静态变量;

    • 代码案例:

      ?
      /**
      * 静态内部类:
      *
      */
      public class Outer {
      ?
         private int id=3;
      ?
         public void out(){
             System.out.println("这是外部类的方法");
        }
      ?
         public static class Inner{
             public void in(){
                 System.out.println("这是内部类的方法");
            }
      ?
        }
      ?
      }
      ?
      ?

 

  • 局部内部类

    • 不建议使用,仅作为分析!

    • 代码案例:

      public class Outer {
      ?
         //局部内部类
         public void method(){
             class Inner{
                 public void in(){
                     
                }
            }
        }
      ?
      }
      ?
      ?

       

  • 匿名内部类:

    • 匿名内部类:没有名字初始化类,不用将实例保存到变量中;

    • 代码案例:

      ?
      /**
      * 匿名内部类
      */
      public class Test {
         public static void main(String[] args) {
      ?
             //没有名字初始化类,不用将实例保存到变量中
             new Apple().eat();
      ?
             UserService userService=new UserService(){
                 @Override
                 public void helo() {
                     System.out.println("22");
                }
            };
        }
      ?
      }
      ?
      ?
      //类
      class Apple{
         public void eat(){
             System.out.println("1");
        }
      }
      ?
      //接口
      interface UserService{
         void helo();
      }