Java篇-内部类的使用

内部类相当于我们可以在类的内部再定义类.
外面的类->外部类.
里面定义的类->内部类

一 : 内部类分类

  • 成员内部类

声明在类内部且方法外的
① 可以有修饰符,可以调用外部类的属性方法

class Person{
    String name = "BOSS";
    int age;
    //成员内部类(非静态)
    class Bird{

        public void info() {
                  //调用外部类方法
            show();
                // 调用外部类的属性
                System.out.println(Person.this.name);

        }
    }

    public void show() {
        System.out.println("我是Show");
        
    }
}

②具有类的特点,可以被abstract 修饰,还可以其内部定义属性,方法构造器.

class Person{
    String name = "BOSS";
    int age;
    //成员内部类(非静态)
    class Bird{
                //内部类属性  
                String name = "king";
        int age;
              //内部类定义方法
        public void info() {
                  //调用外部类方法
            show();
                // 调用外部类的属性
                System.out.println(Person.this.name);
        }
              //定义构造器
              public Bird() {
        }
    }

    public void show() {
        System.out.println("我是Show");
        
    }
}

③静态内部类 用static 修饰

class Person{
    String name = "BOSS";
    int age;
    //成员内部类(静态内部类)
    static class Dog {
        
        
    }
    public void show() {
        System.out.println("我是Show");
        
    }   
}
  • 内部类调用

非静态

//创建非静态的内部类对象,必须先创建外部类的对象,通过外部类的对象调用内部类的构造器.
        Person p = new Person();
        Person.Bird b = p.new Bird();
        b.info();

静态

        //创建静态内部类的对象,可以直接通过外部类调用静态内部类的构造器
//      Person.Dog d = new Person.Dog();
  • 局部内部类

声明在类的方法里

class OuterClass{
    //局部内部类,如下的使用方式较少

    public static void method1() {
        class InnerClass{
            public void show() {
                System.out.println("你好啊我是内部类的傻B方法");
            }   
        }

        InnerClass inner = new InnerClass();
        inner.show();
    }
}

二 : 内部类的使用

常常使用一个方法,使其返回值为某个类或接口的对象,
而这个类或接口在方法内部创建
接口

interface CompareObject{
    int compareTo(Object o);

}

使用一

class OuterClass{
  public Comparable getcomparable() {
        //1创建一个实现 Comparable 接口的类
        //2.返回一个实现类的对象
        class Mycomparable implements Comparable{

            @Override
            public int compareTo(Object o) {
                // TODO Auto-generated method stub
                return 0;
            }
            
        }
        return new Mycomparable();
    }
}

使用二 返回 接口的匿名内部类对象

class OuterClass{
    public Comparable getComparable1() {
        //返回一个实现 Comparable 接口的匿名内部类对象
        
        return new Comparable() {
 
            @Override
            public int compareTo(Object o) {
                // TODO Auto-generated method stub
                return 0;
            }
            
        };
    }
}

你可能感兴趣的:(Java篇-内部类的使用)