分为四种:
1、静态内部类
2、成员内部类
3、局部内部类
4、匿名内部类
内部类顾名思义:就是类中还有类
一、首先来讲解静态内部类,这种是经常用的。
举例学生分为:
1、正常上课的学生用到的教室是用来学习的 2、体育生,他们的教室的内容是一些训练的机械 3、美术生,他们的教室里的内容有画板,颜料什么的。如果想要描述教室他们肯定是每种学生新定义一个类,如果不用内部类,命名会很麻烦。如果用内部类他们可以定义为一个名字。
package Inner1;
public class ArtStudent {
private String name;
private ClassRoom room;//定义一个内部类对象名字叫做room
public ArtStudent(String name,ClassRoom room){//类型:内部类名字 名字是上面定义的
//构造方法:当new一个ArtStudent对象时,传的参数是ClassRoom类型的对象,不是传别的
this.name=name;
this.room=room;
}
public void show(){
System.out.println("名字叫做:"+name+"的学生在教室:"+room.desc+"学习");
//使用ClassRoom类里面的内容用对象调用。
}
//内部静态类就看做静态方法就行
static class ClassRoom{//内部静态类的定义 就用static一个修饰符 static class 类名
private String desc;
public ClassRoom(String desc){
this.desc=desc;
}
public void call(){
show();//因为将静态内部类看做静态方法,他又在外部类的里面所以他可以直接访问外部类的类的属性和类的方法。
}
}
}
public class TextInner {
public static void main(String[] args){
ArtStudent.ClassRoom aRoom=new ArtStudent.ClassRoom("有很多画板");
//生成内部静态类的方法是:因为静态内部类相当于静态方法,调用静态方法是 类名.静态方法。
//外部类名.内部类名 内部类对象名=new 外部类名.内部类名(传构造方法的参数);
ArtStudent as=new ArtStudent("张三",aRoom);
as.show();
}
}
对于外部类来说:静态内部类只能访问外部类的类的属性和类的方法