java中的四大内部类模板

Java中内部类的四大模板

成员内部类

**特点:**成员内部类的级别等同于成员方法
调用时需要外部类的对象 并用外部类的对象来创建内部类的对象,至于内部类内部与普通类内有区别。

//客户端创建外部对象并调用成员
package com.it.template;

import javax.swing.*;

/**
* @Date 2019/8/9 7:57
* @Created by hfh
* @Description TODO
* 成员内部类的对象要借助外部类的对象才能创建
*/
public class MemberClassTest {
   public static void main(String[] args) {
       //方式一:先创建外部类对象 再用外部类对象创建内部类对象
       MemberInnerClass memberInnerClass = new MemberInnerClass();
       memberInnerClass.print();//姓名:LiBai年龄:22 外部类调用外部属性
       //内部类对象  借助外部类对象
     /*  MemberInnerClass.Inner inner = memberInnerClass.new Inner();
       inner.print();//姓名:DuFu年龄:DuFu 内部对象调用内部属性
       //方式二:一步到位的创建
       MemberInnerClass.Inner inner1 = new MemberInnerClass().new Inner();
       inner1.print();//姓名:DuFu年龄:18*/
   }
}


//类结构

/**
* @Date 2019/8/9 7:42
* @Created by hfh
* @Description
* 成员内部类的使用
* 特点 成员内部类的级别等同于成员方法
* 调用时需要外部类的对象 并用外部类的对象来创建内部类的对象
*/
public class MemberInnerClass {
   //外部类属性的封装
   private int age = 22;
   private String name = "LiBai";
   //并通过getter setter公开私有对象 在setter中可以设置属性范围达到安全输入的目的
   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }
   //外部构造器 用来创建外部对象 和初始化对象

   public MemberInnerClass() {
   }

   public MemberInnerClass(int age, String name) {
       this.age = age;
       this.name = name;
   }
   //外部类自己的方法
   public void print(){
       System.out.println("姓名:"+getName()+"年龄:"+getAge());
   }
   //成员内部类 和成员方法同级别 类内部和普通类 一样的使用方法
   public static class Inner{
       //内部类属性封装
       private int age = 18;
       private String name = "DuFu";
       //并通过getter setter公开私有对象 在setter中可以设置属性范围达到安全输入的目的
       public int getAge() {
           return age;
       }

       public void setAge(int age) {
           this.age = age;
       }

       public String getName() {
           return name;
       }

       public void setName(String name) {
           this.name = name;
       }
       //内部类构造器 用来创建内部对象 和初始化对象

       public Inner() {
       }

       public Inner(int age, String name) {
           this.age = age;
           this.name = name;
       }
       //内部类自己的方法
       public void print(){
           //此处默认调用内部类属性,就近原则。当然可以调用外部属性 用外部名.this.属性名的方式
           //例如MemberInnerClass.this.getName()
           System.out.println("姓名:"+getName()+"年龄:"+getAge());
       }
   }
}

静态内部类

特点:静态内部类相当于把成员内部类归类化 此时的静态内部类与外部类同级别
创建对象时不需要节制外部类对象

package com.it.template;

import javax.swing.*;

/**
 * @Date 2019/8/9 7:57
 * @Created by hfh
 * @Description TODO
 * 成员内部类的对象要借助外部类的对象才能创建
 */
public class MemberClassTest {
    public static void main(String[] args) {
        //方式一:先创建外部类对象 再用外部类对象创建内部类对象
        MemberInnerClass memberInnerClass = new MemberInnerClass();
        memberInnerClass.print();//姓名:LiBai年龄:22 外部类调用外部属性
        //内部类对象  借助外部类对象
      /*  MemberInnerClass.Inner inner = memberInnerClass.new Inner();
        inner.print();//姓名:DuFu年龄:DuFu 内部对象调用内部属性
        //方式二:一步到位的创建
        MemberInnerClass.Inner inner1 = new MemberInnerClass().new Inner();
        inner1.print();//姓名:DuFu年龄:18*/
    }
}
//类结构  只是把成员内部类的class关键字前面加上static关键字
package com.it.template;

/**
 * @Date 2019/8/9 8:19
 * @Created by hfh
 * @Description TODO
 */
public class StaticInnerClass {
    //外部类属性的封装
    private int age = 22;
    private String name = "LiBai";
    //并通过getter setter公开私有对象 在setter中可以设置属性范围达到安全输入的目的
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //外部构造器 用来创建外部对象 和初始化对象

    public StaticInnerClass () {
    }

    public StaticInnerClass (int age, String name) {
        this.age = age;
        this.name = name;
    }
    //外部类自己的方法
    public void print(){
        System.out.println("姓名:"+getName()+"年龄:"+getAge());
    }
    //静态内部类 和普通类没有区别 ,类内部和普通类 一样的使用方法
    public static class Inner{//相当于把成员内部类归类话语外部类内有区别
        //静态内部类属性封装
        private int age = 18;
        private String name = "DuFu";
        //并通过getter setter公开私有对象 在setter中可以设置属性范围达到安全输入的目的
        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
        //静态内部类构造器 用来创建内部对象 和初始化对象

        public Inner() {
        }

        public Inner(int age, String name) {
            this.age = age;
            this.name = name;
        }
        //静态内部类自己的方法
        public void print(){
            System.out.println("姓名:"+getName()+"年龄:"+getAge());
        }
    }
}

局部内部类

特点:确切的说外部类不知道局部内部类的存在,局部内部类的级别与局部属性一样,存在栈中,用完就会消失,因此局部内部类的调用必须要在宿主方法里完成(包括对象的创建,成员的调用)
//客户端创建对象 成员的调用

package com.it.template;

/**
 * @Date 2019/8/8 9:43
 * @Created by hfh
 * @Description TODO
 */
public class LocalTest {
    public static void main(String[] args) {
        //创建外部类对象  外部对象不知道内部对象的存在
        LocalInner localInner = new LocalInner();
        localInner.print();
    }
}
//类结构
package com.it.template;

/**
 * @Date 2019/8/8 9:39
 * @Created by hfh
 * @Description TODO
 */
public class LocalInner {
    //外部类属性
    private int age = 88;
    private String name = "LiBai";

    //外部类构造
    public LocalInner() {
    }

    public LocalInner(int age, String name) {
        this.age = age;
        this.name = name;
    }

    //外部类构造
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //外部类方法
    public void print() {
        System.out.println(getAge() + "       " + getName());
        //局部内部类与局部属性一个级别 因此不能有访问修饰符
        class Inner {
            //内部类属性
            private int age = 18;
            private String name = "DuFu";

            //内部类构造
            public Inner() {
            }

            public Inner(int age, String name) {
                this.age = age;
                this.name = name;
            }

            //内部类setter getter
            public int getAge() {
                return age;
            }

            public void setAge(int age) {
                this.age = age;
            }

            public String getName() {
                return name;
            }

            public void setNamr(String name) {
                this.name = name;
            }

            //内部类方法
            public void print() {
                System.out.println(getAge() + "       " + getName());
            }

        }
        //局部内部类额的对象只能在方法里面使用 因此在外部不能创建对象
        Inner inner = new Inner();
        inner.print();//局部对象调用局部类方法
    }
}


匿名内部类

特点 :借助接口用接口类型变量接收类体


//客户端
package com.it.template;

/**
 * @Date 2019/8/8 9:50
 * @Created by hfh
 * @Description TODO
 */
public class NonameTest {
    public static void main(String[] args) {
        NoNameOutter noNameOutter = new NoNameOutter();
        noNameOutter.print();
        noNameOutter.noNameInner.print();
        //88       NoNameOutter
        //inner
    }
}
//匿名 类接口
package com.it.template;

public interface NoNameInner {
    public void print();
}
//类体
package com.it.template;

/**
 * @Date 2019/8/8 9:46
 * @Created by hfh
 * @Description TODO
 */
public class NoNameOutter {
    //外部类属性
    private int age = 88;
    private String namr = "NoNameOutter";

    //外部类构造
    public NoNameOutter() {
    }

    public NoNameOutter(int age, String namr) {
        this.age = age;
        this.namr = namr;
    }

    //外部类构造
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getNamr() {
        return namr;
    }

    public void setNamr(String namr) {
        this.namr = namr;
    }

    //外部类方法
    public void print() {
        System.out.println(getAge() + "       " + getNamr());
    }
    //nonameInner  lamda表达式
    NoNameInner noNameInner = ()->{
        System.out.println("inner");
    };
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值