Java面向对象:内部类

目录

 * 内部类:

   * 作用:

   * 优点:

   * 内部类的分类

外部类

    * 静态内部类:

      * 成员内部类:(实例内部类)

 主函数

      // 静态内部类的调用:外部类.内部类

      //成员内部类的调用,外部类.内部类 对象名=new 外部.new 内部();

      * 局部内部类

       * 匿名内部类


 * 内部类:

   * 定义(寄生)一个主类(宿主)里面的类

   * 作用:

              * 当一个类的内部中有一个部分需要一个完整的结构进行描述,而这一部分只为这个类进行服务,则内部结构可以用内部类完成

   * 优点:

              * 提供了更好的封装性,内部类可以用private,protected等修饰

              * 方便访问外部类的成员,包括私有的成员

   * 内部类的分类

              * 静态内部类

              * 成员内部类

              * 局部内部类

              * 匿名内部类

外部类

class Outer {   

//外部类的成员

   public static String o = "外部类的静态成员";

   private String u = "外部类的实例成员";

   //无参构造器

   public Outer(){}

   //有参构造器

   public Outer(String u) {

      this.u = u;

   }

   /**

    * 静态内部类:

      * static修饰

      * 直接访问外部类的静态成员,间接(对象)访问外部类的实例成员

      * 一个类中需要一个完整的部分

    */ 

 public static class Static {

      private String name = "静态内部类";

      // 可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员

      public Static() {

         //System.out.println(u);// 报错

         System.out.println(name);

         System.out.println("可以访问"+o);//外部类的静态成员

      }


      public String getName() {

         return name;

      }

     public void setName(String name) {

         this.name = name;

      }

   }

   

   /**

      * 成员内部类:(实例内部类)

      * 无static修饰,属于外部类的对象(实例)

      * jdk16之前不能定义静态,JDK16之后才可以

      * 可以直接访问外部类的静态成员和实例成员

    */

 public class Member {

      private String name = "成员内部类";

      public static String s = "JDK16之后支持静态";

     

      public Member(){

         System.out.println(name);

         System.out.println(s);

         //可以访问外部类的静态成员和实例成员

         System.out.println("可以访问"+o);

         System.out.println("可以访问"+u);

      }

}

//成员内部类访问寄生的外部类对象:外部类.this.

class Outer {
    private int num=150;
    public class Member {
        private int num=110;
        public class inMember{
         int num=78;
         public void show(){
            System.out.println(num);//78  就近原则
            System.out.println(this.num);//110  
            System.out.println(Outer.this.num);//150
         }
      }
    }
}

 主函数

public class Main {

   public static void main(String[] args) {

      // 静态内部类的调用:外部类.内部类

Outer.Static s = new Outer.Static();

          System.out.println("------分割线-------");

      //成员内部类的调用,外部类.内部类 对象名=new 外部.new 内部();

      //成员内部类属于外部类的对象

      Outer.Member m=new Outer().new Member();

      Outer.Member m1=new Outer("外部类的有参构造器").new Member();

      /**

      * 局部内部类

         * 在方法,代码块,构造器等执行体中的,(脱裤子放屁)

         * 可以抽象,接口

         * 文件名:外部类$N内部类.class

      */

      class Part{}

      interface Part1{}

      abstract class Part2{}

      //局部内部类调用:

      Part p=new Part();

      /**

       * 匿名内部类

         * 没有名字的内部类

         * 写出来就会带出匿名内部类的对象

         * 方便创建子类对象,简化代码编写

       */

      //格式:new 类|抽象类名|接口名(){ 重写方法;};

      Anom a=new Anom() {

         public void run(){

            System.out.println("匿名内部类运行");

         }

      };

      a.run();//匿名内部类运行

   }

}

 匿名内部类用到的抽象类

abstract class Anom{
   abstract void run();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿崽meitoufa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值