java中允许将一个类A声明在类B中,则类A就是内部类,类B就是外部类
内部类的分类:成员内部类 vs 局部内部类
一方面,作为外部类的成员:
可以调用外部类的结构
可以被static修饰
可以被四种不同的权限修饰
另一方面,作为一个类:
类内可以定义属性、方法、构造器等
使用final修饰,表示类不能被继承,言外之意,不使用final就可以被继承
可以被abstract修饰
1.如何实例化成员内部类的对象
2.如何在成员内部类中区分调用外部类的结构
3.开发中局部内部类的使用
实例化静态内部类的时候可以直接new,非静态的话不能直接New要先创造外部类,因为非静态不会随着类的加载而加载
package lei;
public class innerClassTest {
public static void main(String[] args) {
//创建dog实例(静态的成员内部类)
Persontwo.Dog dog = new Persontwo.Dog();
dog.show();
// 创建bird实例(非静态的成员内部类)
Persontwo p = new Persontwo();
Persontwo.Bird bird = p.new Bird();
bird.sing();
bird.display("黄鹂");
}
}
class Persontwo{
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("我是一只小小鸟");
eat();
}
public void display(String name){
System.out.println(name); // 形参
System.out.println(this.name); // 内部类的属性
System.out.println(Persontwo.this.name); // 外部类的属性
}
}
public void method(){
//局部内部类
class AA{
}
}
{
// 局部内部类
class BB{
}
}
public Persontwo(){
// 局部内部类
class CC{
}
}
}
package lei;
// 局部内部类的使用
public class innerClassTest2 {
// 开发中很少见
public void method(){
//局部内部类
class AA{
}
}
// 返回一个实现了Comparable接口的对象
// 方式一:标准
public Comparable getComparable(){
// 局部内部类,创建一个实现Comparable接口的类
class MyComparable implements Comparable{
@Override
public int compareTo(Object arg0) {
// 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;
}
}
}
}