目录
类的五大成员:属性,方法,构造方法,代码块,内部类
内部类——在一个类的里面,再定义一个类
举例:在A类的内部定义B类,B类就被成为内部类
使用场景:
内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义
比如:汽车发动机,人体心脏,ArrayList的迭代器等等
内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
内部类的分类:
1.成员内部类——了解
写在成员位置的,属于外部类的成员,可以被一些修饰符修饰,如:private,默认,protected, public,static等
JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量
获取成员内部类对象:
方式一:在外部类中编写方法,对外提供内部类的对象
方式二:直接创建格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象
获取成员外部类对象:就近原则
a
this.a
外部类名.this.a
2.静态内部类——了解(static修饰的内部类)
静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象
创建静态内部类对象的格式:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
Outer.Lnner oi = new Outer.Lnner();
调用非静态方法的格式: 先创建对象,用对象调用
调用静态方法的格式: 外部类名.内部类名.方法名();
3.局部内部类——了解
1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量
2.外界无法直接使用,需要在方法内部创建对象并使用
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量
4.匿名内部类——重点掌握
匿名内部类的本质上就是隐藏了名字的内部类
格式: new 类名或接口名(){
重写方法;
}
举例: new Inter(){
public void show(){
}
}
如以前写的Swim接口:
public interface Swim{
public abstract void swim();
}
编写类去实现接口——实现类
public class Student implements Swim(){
@Override
public void swim(){
System.out.println("重写的游泳方法);
}
}
编写匿名内部类——隐藏了名字的内部类,并非没有名字 可以写在成员位置,也可以写在局部位置
1.继承/实现
2.方法重写
3.创建对象
new Swim(){ // ——实际上是匿名内部类的对象
@Override
public void swim(){
System.out.println(""重写的游泳方法);
}
};
扩展:this关键字