Java面向对象05
static
- static关键字表示静态的,被static修饰的属性或者方法从属于整个类,而不属于类的某个对象。
- static关键字可以用来修饰类、属性、方法、代码块。
- static修饰一个类,即表示
- 该类不能被继承。
- static修饰属性,表示这个属性从属于这个类,可以直接使用 类名.属性名 调用,并且只会在类加载时加载一次。
- static修饰方法,表示这个方法从属于这个类,可以直接使用
类名.方法名调用,并且只会在类加载时初始化该方法
- static修饰的代码块是静态代码块,只会在类加载的时候加载一次,此后,无论初始化多少个该类的实例对象,都只会拥有同一块静态代码块的数据。
- 没有被static修饰的代码块称为匿名代码块,匿名代码块从属于对象,即每初始化一个新的对象,都会初始化一份匿名代码块的数据,匿名代码块的初始化会在构造方法前执行。
抽象类
- abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。
- 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。
- 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。
- 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。
- 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。
接口
- 普通类: 只有具体实现
- 抽象类: 具体实现和规范(抽象方法)都有!
- 接口: 只有规范!自己无法写方法,专业的约束!约束和实现分离。
- 接口就是规范,定义的是一组规则,体现了现实世界中"如果你是...则必须能..."的思想。
- 接口的本质就是契约。制定好后大家都遵守。
- 接口是面向对象编程的精髓,对对象的抽象,最能体现这一点的就是接口。
- 声明接口的关键字是interface。
- Java中的继承是单继承,但是可以利用接口实现多继承。
内部类
- 内部类就是在一个类的内部再定义一个类
- 成员内部类
- 可以是任何的访问修饰符
- 内部类中不能有静态的属性或方法
- 内部类和普通类一样,该继承继承,该重写重写,该重载重载,this和super随便使用
- 外部类访问内部类信息,通过new关键字创建内部类对象后访问。
- 内部类可以直接使用外部类的任何信息,如果属性或者方法发生冲突,使用 外部类名.this.属性名或方法名 调用。
- 静态内部类
- 内部类可以包含任意的信息
- 静态内部类的方法只能访问外部类的静态属性
- 利用 **外部类.内部类 引用=new 外部类.内部类()**创建静态内部类对象,再用 引用.成员信息(属性、方法) 调用
- 访问内部类的静态信息,直接使用 外部类.内部类.静态信息 就可以了
- 静态内部类可以独立存在,不依赖于其他外部类。
- 局部内部类
- 局部内部类不能有访问修饰符
- 仅仅只能在当前方法中使用
- 无法创造静态信息
- 可以直接访问方法内部的局部变量,前提是该变量直接被final修饰或者已被赋值但始终未改变,JDK1.8之前只能访问被final修饰的变量
- 可以随意访问外部类的任何信息
- 匿名内部类
- 匿名内部类没有访问修饰符
- 使用匿名内部类必须使用new关键字创建该类的匿名对象,并且需要重写该类的某个或者某些方法
- 匿名内部类访问方法中的变量时也只能访问被final修饰的变量或者已被赋值但始终未改变的变量
- 匿名内部类没有构造方法