N种内部类
内部类的使用场景、作用:
- 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。
- 内部类通常可以方便访问外部类的成员,包括私有的成员。
- 内部类提供了更好的封装性,内部类本身就可以用private
protectecd等修饰,封装性可以做更多控制。
public class Person {
private int id=10;
public void outer(){
System.out.println("这是外部类");
}
public class Student{
public void inner(){
System.out.println("这是成员内部类");
}
public void getid(){
System.out.println(id);//成员内部类可直接调取
}
}
//这也是内部类
public stati class Teacher{
public void inner1(){
System.out.println("这是静态内部类");
}
//获得外部类的私有属性
}
}
- 运行
public abstract class Application {
public static void main(String[] args) {
Person person = new Person();
//内部类实例化
Person.Student student = new Person.new Student();
student.inner();
//内部类实例化
Person.teacher laoshi = new Person.teacher();
laoshi.getid();//内部类调用外部类私有属性
}
}
注意:静态化内部类无法调用外部属性与方法,因为静态修饰的先运行,此时外部类还没运行
* 成员内部类创建对象的格式*外部类名.内部类名 对象名 = new 外部构造器.new内部构造器
*静态内部类创建对象的格式:*
外部类名.内部类名 对象名 = new 外部类名.内部类名();
相较于静态内部类,成员内部类,不仅可以访问外部类的静态成员变量,同时也可以访问外部类的实例成员,原因在于内部类的实例对象是在外部类创建之后而创建的,其可以直接调用之前所创建对象的实例成员
- 局部内部类
public class Person {
public void method(){
//局部内部类
class inner{
public void method(){
}
}
}
}
- 匿名初始化类
public class Person {
}
class Apple{
public void eat(){
System.out.println("吃苹果");
}
}
interface Jiekou{
public void hello();
}
Apple apple = new Apple();
//匿名对象,没有名字初始化类,不用将实例保存到变量
new Apple().eat();
//没有名字
//等于Jiekou jiekou=new Jiekou(){};
new Jiekou(){
//方法的重写
@Override
public void hello() {
}
};
创作不易,给个三连吧