1.内部类
内的五大成员:属性、方法、构造方法、代码块、内部类
- 解释:在一个类的里面,再定义一个类。
- 举例:在A类的内部定义B类,B类就被称为内部类
- 注意:内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义
内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
public class Car(){ //外部类String carName;int carAge;int carColor;class Engine{ //内部类String engineName;int engineAge;}
}
内部类的分类
-
成员内部类
- 写在成员位置,属于外部类的成员
- 成员内部类可被一些修饰词修饰
public class Car(){ //外部类String carName;int carAge;int carColor;class Engine{ //成员内部类String engineName;int engineAge;}
}
3. 获取成员内部类对象
一:在外部类编写方法,对外提供内部类的对象
public class Outer {String name;class Inner{}public Inner getInstans(){return new Inner();}
}
Outer o = new Outer();
o.getInstans();
二:直接创建 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
OUter.Inner oi = new Outer().new Inner();
public class Outer {private int a = 10;class Inner{private int a = 20;}void show(){int a=0;//Outer.this 获取外部类对象的地址值System.out.println(Outer.this.a); //10System.out.println(this.a); //20System.out.println(a); //30}
}
-
静态内部类
1.静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象
public class Car { //外部类String carName;int carAge;int carColor;static class Engine { //静态内部类String engineName;};int engineAge;
}
2.创建静态内部类对象的格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
OUter.Inner oi = new Outer().Inner();
3.调用非静态方法的格式:先创建对象,用对象调用
4.调用静态方法的格式:外部类名.内部类名.方法名();
-
局部内部类
1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
2.外界是无法直接使用,需要在方法内部创建对象并使用。
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
-
匿名内部类
- 匿名内部类
隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置
- 匿名内部类的格式
new 类名或者接口名(){重写方法
};
- 格式的细节
包含了继承或实现,方法重写,创建对象
整体就是一个类的子类对象或者接口的实现类对象
- 使用场景
当方法的参数是接口或者类时,
以接口为例,可以传递这个接口的实现类对象,
如果实现类只要使用一次,就可以用匿名内部类简化代码
示例:
public interface Swim {public abstract void swim();}
public class Test {public static void main(String[] args) {new Swim(){@Overridepublic void swim() {System.out.println("重写游泳方法");}};}
}