内部类定义在外部类的成员位置
成员:可以使用成员修饰符,public static ...
类:可以继承类,可以实现接口
内部类中可以直接使用外部类中的所有的内容,包括私有的
内部类中不可以直接定义静态的内容,除了静态的常量,静态的内容要定义在静态内部类当中
实例:public class InnerType {
int a=5;
//成员内部类
public class Inner{
int a=10;
private int b=5;
static final int C=7;
public void haha(){
int a=15;
int b=16;
System.out.println(a);
System.out.println(this.a);
System.out.println(new InnerType().a);
}
}
public void outer() {
System.out.println();
}
}
2、私有内部类:
私有内部类中可以使用外部类中所有的内容,包括私有的
私有内部类只能在外部类中可以通过对象使用私有内部类中的私有内容,其他类中不能使用
实例:
public class PrivateInner {
private int a=3;
private void method(){
System.out.println("hanlohah");
}
private class PrivateInner1{
private int b=5;
private void method1(){
System.out.println("hanloheh");
System.out.println(a);
method();
}
}
public void method2() {
System.out.println(new PrivateInner1().b);
new PrivateInner1().method1();
}
}
3、静态内部类
1.静态内部类可以定义静态的内容可以定义成员的内容
2.在静态内部类中使用外部类中的非静态的内容,要通过外部类的对象去使用
3.在外部类中可以通过类名使用静态内部类中的静态内容,需要通过对象使用静态内部类中的成员内容
4.在其他类中可以通过外部类名.静态内部类名.静态内容使用静态内部类中的静态内容
new 外部类.静态内容类() 创建静态内部类的对象使用静态内部类中的成员
实例
public class StaticInner {
int d = 5;
static int a = 3;
void xixi() {
System.out.println("xixi");
}
static void hha() {
System.out.println("hanlohah");
}
static class StaticInner1 {// 静态内部类里面可以定义静态|成员变量|方法
int b = 2;
static int c = 3;
void hha1() {
StaticInner sta = new StaticInner();
System.out.println(sta.d);// 内部类成员方法里面调用外部类静态需要对象调用
sta.xixi();
System.out.println(a);
hha();
}
static void hehe() {
System.out.println(a);
hha();
StaticInner sta = new StaticInner();
sta.xixi();
System.out.println(sta.d);
}
}
void hanlo() {
StaticInner1 sta = new StaticInner1();
System.out.println(sta.b);
System.out.println(StaticInner1.c);
sta.hha1();
StaticInner1.hehe();
}
}
4、局部内部类
方法中定义内部类
1.局部内部类不可以使用成员修饰符修饰(比如:public,static...不包括final)
2.只能在当前定义局部内部类的方法中可以通过内部类的对象使用内部类中的成员,通过类可以使用静态
3.局部内部类所再的方法的参数,在jdk1.8之后默认,1.7之前需要显示定义
实例:
public class LocalInner {
int a=3;
static int b=5;
void xms(int h){//1.8后默认final修饰
class LocalInner1{//不能被成员修饰符修饰
int c=3;
static final int G=3;
void jy(){
System.out.println(h);//可以输出类的参数
System.out.println(c);
System.out.println(a);
System.out.println(b);
}
}
System.out.println(LocalInner1.G);//只能在 方法内中访问局部类的属性
LocalInner1 loc=new LocalInner1();
System.out.println(loc.c);
}
void outer(){//只能访问到方法xms不能访问到局部类内部的属性
}
}