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;
}
};
}
}