(1)Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B就是外部类
(2)内部类的分类,成员内部类(静态,非静态) vs 局部内部类(方法内,代码块内,构造器内)
(3)成员内部类
--作为外部类的成员
①调用外部类的结构
②可以被static修饰
③可以被四种修饰符修饰
--作为一个类
①类内可以定义属性,方法,构造器等
②可以被final修饰,表示此类不能被继承。不被final修饰可以被继承
③可以被abstract修饰
(4)关注以下三个问题
①如何实例成员内部类对象
②如何在成员内部类中区分调用外部类的结构
③开发中局部内部类的使用
package com.test.course.inner;
/**
* @author PitterWang
* @create 2020/5/2
* @since 1.0.0
*/
public class Animal {
String name;
public static int age;
public void eat(){
System.out.println("动物吃东西");
}
public void setName(String name){
this.name = name;
}
/***
*静态内部类
*/
static class Dog{
String name;
public Dog(){
}
public void eat(){
System.out.println("Dog东西");
}
public void getWhoName(){
age = 12;
//Animal.this.name = "Bird";//无法调用外部类的非静态方法
//setName("Bird");//无法调用外部类的非静态方法
this.eat();
}
}
/***
* 非静态内部类
*/
class Bird{
String name;
public Bird(){
}
public void eat(){
System.out.println("Bird东西");
}
public void getWhoName(){
setName("Bird");
Animal.this.name = "Bird";
Animal.this.eat();
this.eat();
}
}
}
package com.test.course.inner;
/**
* 〈内部类的使用〉
* @author PitterWang
* @create 2020/5/2
* @since 1.0.0
*/
public class InnerClassTest {
public static void main(String[] args) {
/**
* 实例静态成员内部类
*/
Animal.Dog dog = new Animal.Dog();
dog.getWhoName();
/***
* 实例非静态内部类
*/
Animal animal = new Animal();
Animal.Bird bird = animal.new Bird();
bird.getWhoName();
}
}