内部类
![在这里插入图片描述](https://img-blog.csdnimg.cn/13667775d0d84e028d99997b6e474679.png)
成员内部类
//身体
public class body {
private String name = "王国 ";
//头部
class header{
private int age = 21;
private String name = "附属国 ";
//private static String country ="中国"; //内部类不能定义静态成员
private static final String country = "中国"; //但是内部类可以定义静态常量
public void show(){
System.out.println(age);
System.out.println(name); //当外部类和内部类存在重名时,优先访问内部类属性
System.out.println(body.this.name);//若要执行外部类,就需要加上body.this
}
}
}
主函数
public class Application {
public static void main(String[] args) {
// //1.创建外部类对象 (需要创建外部类对象后才能创建内部类)
// body b = new body();
// //2.创建内部类对象
// body.header h =b.new header();
//两部合并,一步到位
body.header h = new body().new header();
h.show();
}
}
静态内部类
//外部类
public class StaticLei {
private int age = 18;
//静态内部类,和外部类等级相同
static class Body{
private String name = "王豆";
public void show(){
//调用外部类的属性
//1.先创建外部类对象
StaticLei lei = new StaticLei();
//2.调用外部类对象的属性
System.out.println(lei.age);
//调用静态内部类的属性和方法
System.out.println(name);
}
}
}
主函数
public class Application {
public static void main(String[] args) {
//直接创建静态内部类对象
StaticLei.Body body = new StaticLei.Body();
//调用方法
body.show();
}
}
局部内部类
public class JuBu {
private String name = "大拿";
public void show(){
//定义局部变量
String address = "西安"; //这个是常量,默认添加了final。访问show方法时,变量执行完,内部类并没有执行完,如果不是常量,在访问show2的时候这个变量就已经没了
//局部内部类:注意不能加任何访问修饰符
class NeiBu{
//局部内部类的属性
private int age = 11;
private final static String email = "123@qq.com";//不能添加静态变量,可以加final让它变成静态常量
public void show2(){
//访问外部类属性,可以直接 访问,相当于加了JuBU.this.name;
System.out.println(name);
//访问内部类属性,可以直接 访问,相当于加了this.age;
System.out.println(age);
//访问局部变量,变量必须是常量final,JDK1.8自动添加final
System.out.println(address);
}
}
//创建局部内部类对象,不创建,主函数调用外部类的show方法,是不会用到内部类的show2方法的。
NeiBu neibu = new NeiBu();
neibu.show2();
}
}
主函数
public class Application {
public static void main(String[] args) {
JuBu jubu = new JuBu();
jubu.show();//要在show()方法里创建内部类对象,不然执行show()方法时不会执行内部类的show2
}
}
匿名内部类
public class Kou implements Jie {
@Override
public void shubiao() {
System.out.println("鼠标");
// //局部内部类
// class fan implements Jie{
// @Override
// public void shubiao() {
// System.out.println("风扇");
// }
// }
// //使用局部内部类创建 对象
// Jie j = new fan();
// j.shubiao();
//使用匿名内部类来优化(相当于创建了一个局部内部类)
Jie j = new Jie() {
@Override
public void shubiao() {
System.out.println("风扇");
}
};
j.shubiao();
}
}
主函数
public class Application {
public static void main(String[] args) {
Jie j= new Kou();
j.shubiao();
}
}