内部类

2020-12-12  本文已影响0人  冯宏志

成员内部类

1、一方面,作为外部类的成员。①、调用外部类的结构。②、可以被static修饰。③可以被四种不同的权限修饰。
2、另一方面,作为一个类。①、可以定义属性、方法、构造器等。②可以被final修饰,表示此类不能被继承。③可以被abstract修饰

package com.atguigu.java8;

public class InnerClassTest {

}

class Person{
    String name;
    int age;
    
    public void eat() {
        System.out.println("人吃饭");
    }
    
    //静态成员内部类
    static class Dog{
        String name;
        int age;
        
        public void show() {
            System.out.println("我是狗");
        }
    }
    //非静态成员内部类
    class Bird{
        String name;
        
        public Bird() {
            
        }
        
        public void sing() {
            System.out.println("我是一只小小鸟");
            Person.this.eat();//调用外部类的非静态属性
        }
    }
}

局部内部类

  1. 内部类的实例化问题
  2. 如何在内部类中区分调用外部类的结构
  3. 开发中局部内部类的使用
package com.atguigu.java8;

public class InnerClassTest {
    public static void main(String[] args) {
        //1、内部类的实例化问题
        //实例化静态成员内部类
        Person.Dog dog = new Person.Dog();
        dog.show();
        //实例化非静态成员内部类
        Person p = new Person();
        Person.Bird bird = p.new Bird();
        bird.sing();
    }
}

class Person{
    String name;
    int age;
    
    public void eat() {
        System.out.println("人吃饭");
    }
    
    //静态成员内部类
    static class Dog{
        String name;
        int age;
        
        public void show() {
            System.out.println("我是狗");
        }
    }
    //非静态成员内部类
    class Bird{
        String name;
        
        public Bird() {
            
        }
        
        public void sing() {
            System.out.println("我是一只小小鸟");
            Person.this.eat();//调用外部类的非静态属性
        }
        
        //2、如何在内部类中区分调用外部类的结构
        public void display(String name) {
            System.out.println(name);               //传入的形参
            System.out.println(this.name);          //内部类的name
            System.out.println(Person.this.name);   //外部类的name
        }
    }
}
package com.atguigu.java8;

//3、开发中局部内部类的使用 
public class InnerClassTest1 {
    //返回一个实现了Comparable接口的类的对象
    public Comparable getComparable() {
        //创建一个实现了Comparable接口的类:局部内部类
        //方式一:
        class MyComparable implements Comparable{

            @Override
            public int compareTo(Object o) {
                // TODO Auto-generated method stub
                return 0;
            }
            
        }
        return new MyComparable();
        //方式二:
        return new Comparable() {

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



上一篇 下一篇

猜你喜欢

热点阅读