在一个类里面创造的一个类,就是内部类。
public class car{
String name;
class engine
{
String engineName;
}
}
什么时候使用内部类
1.内部类表示的事物是外部类的一部分
2.内部类单独出现没有任何意义
内部类的访问特点
内部类可以访问外部类的成员,包括私有
外部类要访问内部类的成员,必须要创造内部类对象
成员内部类
写在成员位置的,属于外部类的成员
跟成员一样,可以被一些修饰符,例如:private,public,static,等
获取内部类对象的方式:
1.外部类中编写方法,对外提供内部类的对象.可以用父类接收或者直接使用
public class outer{ public class inner{ } public inner getInner(){ return new inner; } }
2.外部类名.内部类名=new外部类名().new内部类名()。
public class outer{ public class inner{ } } outer.inner oi= new outer().new inner();//创造对象
成员内部类如何获取外部类的成员变量
class outer{ private int a=10; class inner{ private int a=20; public void show(){ int a=30; System.out.println(); System.out.println(); System.out.println(); } } }
以上代码show方法参数直接填a可以打印出30。
参数this.a,this是inner对象的地址值,打印的是inner类的20。
inner对象中有一个参数,记录了父类的地址值,用outer.this.a可以打印出30。
静态内部类
用static修饰的类
静态内部类只能访问外部类的静态变量跟静态方法,如果想要访问非静态的需要创建对象
创建内部静态类对象的格式
外部类内部类类名=new外部类.静态类名();
调用非静态方法的格式
先创建对象,用对象名调用
调用静态方法的格式
外部类名.内部类名.方法名();
局部内部类
1.内部类定义在方法里面就叫局部内部类,局部内部类类似于局部变量,例如不能用public修饰
2.外界无法直接使用,需要在方法内部创建对象并使用
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量
匿名内部类:
原本我们需要创建子类或者实现类,去继承父类和实现接口,才能重写其中的方法。但是有时候我们这样做了,然而子类和实现类却只使用了一次(定义了一个对象)。这个时候我们就可以使用匿名内部类,不用去写子类和实现类,起到简化代码的作用。
格式
new 类名(){
重写方法
};
案例
public interface inter { public abstract void eat(); } //定义接口 public static void main(){ method( //使用匿名内部类 new inter(){ @Override public void eat() {} } ); } public static void method(inter a)//多态 { }