JAVA_基础内部类

内部类

java允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类

内部类的分类:成员内部类(静态内、非静态内) VS 局部内部类(方法内、代码块内、构造器内)
外部类的成员
1)调用外部类的机构。
2)可以用被static修饰。
3)可以被四种不同的权限修饰。

作为一个类
1)类内可以定义属性、方法、构造器等。
2)可以被final修饰,表示此类不能被继承。言外之意,不使用final就可以被继承。
3)可以被abstract修饰,表示此类不能被实例化。与上面同理,不使用abstract就能被实例化。

关注如下三个问题
1)如何实例化成员内部类的对象。
2)如何在成员内部类中区分调用外部类的结构。

public class InnerClassTest {
	public static void main(String[] args) {
//		创建Dog实例(静态的成员内部你)
		Person.Dog dog = new Person.Dog();
		dog.show();
		
//		创建Bird实例(非静态的成员内部类)
		Person person = new Person();
		Person.Bird bird = person.new Bird();
		bird.sing();
		System.out.println();
		bird.display("黄鹂");
	}
}

class Person{
	
	String name = "库森";
	int age;
	
	public void ead() {
		System.out.println("人:吃饭");
	}
	
	//静态成员内部类
	static class Dog {
		String name;
		
		public Dog() {}
		
		public void show() {
			System.out.println("卡拉沙狗");
		}
	}
	
	//非静态成员内部类
	class Bird{
		String name = "杜鹃";
		
		public Bird() {}
		
		public void sing() {
			System.out.println("我是一只小小鸟");
			//调用外部类的一个方法
			Person.this.ead();	
		}
		public void display(String name) {
			System.out.println(name);//方法形参
			System.out.println(this.name);//内部类的name
			System.out.println(Person.this.name);//外部类的name
			System.out.println(age);//在没有重名的情况下可以直接调用外部类的成员属性
		}
	}
	
    public Person() {
		class CC {}//局部内部类
	}
	public void method() {
		class AA {}//局部内部类
	}
	{
		class BB {}//局部内部类
	}
    //修饰内部类
	abstract class Cat{}
	final class Snake{}
}

​ 3)开发中局部内部类的使用。

public class InnerClassTest1 {
	public Comparable getComparable() {
//		方式一:
		class MyComparable implements Comparable {
			@Override
			public int compareTo(Object o) {
				return 0;
			}
		}
		return new MyComparable();
//		方式二:
		return new Comparable() {
			@Override
			public int compareTo(Object o) {
				return 0;
			}
		};
	}
}
原文地址:https://www.cnblogs.com/BeautifulGirl230/p/14228190.html