@生活冷战士 #和我一起去战斗
内部类
- 非静态内部类
//1.内部类可以用private protected static修饰
//2.非静态内部类不能拥有static成员
//3.内部类可以访问外部类成员,反之则不可以
//4.如果外部类和内部类具有同名的成员变量,则需要使用this访问
/**
* 外部内
* @author 生活冷战士
*/
public class Woman {
private int age;
public Woman(int age) {
super();
this.age = age;
}
public void create() {
Baby baby = new Baby("安琪拉",3);
}
/**
* 非静态内部类
* @author 生活冷战士
*
*/
public class Baby{
int age;
String name;
public Baby(String name,int age) {
super();
System.out.println("执行了Baby内部类的构造方法");
this.name = name;
this.age = age;
}
public void visited() {
//访问外部类成员变量
System.out.println("woman age is=========="+Woman.this.age);
//访问内部类成员变量
System.out.println("woman age is=========="+this.age);
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
Woman woman = new Woman(19);
Baby baby = woman.new Baby("小糯米",2);
baby.visited();
}
}
2.静态内部类
//1.静态内部类可以包含静态成员,也可以包含非静态成员
//2.静态内部类不能访问外部类的实例成员,只能访问外部类静态成员,如果访问外部类实例成员,需要内部中创建外部类对象
public class StaticInnerClass {
static String gender;
int money;
public StaticInnerClass(int money) {
super();
this.money = money;
}
public void create() {
Inner inner = new Inner();
inner.visited();
}
/**
* 静态内部类
* @author 生活冷战士
*/
static class Inner{
//静态成员
static String name;
//非静态成员
int age;
public void visited() {
//访问外部类静态成员
System.out.println(gender);
//访问外部类非静态成员
System.out.println(new StaticInnerClass(2000).money);
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
//第一种外部类中定义方法,方法内实例化内部类,并实例化外部类,调用该方法(不推荐)
StaticInnerClass staticInnerClass = new StaticInnerClass(1000);
staticInnerClass.create();
//第二种 通过外部类.
StaticInnerClass staticInnerClass = new StaticInnerClass.Inner();
}
}
3.局部内部类
//1.局部内部类不能用static修饰,也不能使用访问修饰符
//2.局部内部类仅在当前方法内有效
/**
* 局部内部类
* @author 生活冷战士
*/
public class MethodInnerClass {
public void say() {
class Inner {
}
}
}
4.匿名内部类
//1.匿名内部类不能是抽象类
//2.匿名内部类不能定义构造器
//接口
public interface IUsb {
void service();
}
public static void main(String[] args) {
IUsb usb2 = new IUsb() {
@Override
public void service() {
// TODO Auto-generated method stub
}
};
}