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;
}
} -
获取成员内部类对象
一:在外部类编写方法,对外提供内部类的对象
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); //10
System.out.println(this.a); //20
System.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(){
@Override
public void swim() {
System.out.println("重写游泳方法");
}
};
}
}