final关键字
- 概述
final: 不可改变。可以用于修饰类、方法和变量。
- 类:被修饰的类,不能被继承。
- 方法:被修饰的方法,不能被重写。
- 变量:被修饰的变量,不能被重新赋值。(一般用来定义常量)
- 使用方式
- 修饰类:final class 类名 {}
- 修饰方法:修饰符 final 返回值类型 方法名(参数列表){//方法体}
- 修饰变量:
- 局部变量(基本数据类型):只能赋值一次,不能再更改。
- 局部变量(引用类型): 只能指向一个对象,地址不能再更改
- 成员变量(俩种初始化方式): 显示初始化;构造器初始化
被final修饰的常量名称,一般都有书写规范,所有字母都大写。
权限修饰符
public | protected | default(空的) | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
内部类
- 成员内部类
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
public class Computer {
class Cpu {
}
}
Computer类就是Cpu类的外部类,Cpu类就是Computer类的内部类。
访问特点
- 内部类可以直接访问外部类的成员,包括私有成员。
- 外部类要访问内部类的成员,必须要建立内部类的对象。
- 创建内部类的格式:外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
public class Computer {
class Cpu {
public void description(){
System.out.println("我是电脑的cpu");
}
}
public static void main(String[] args) {
Computer.Cpu cpu = new Computer().new Cpu();
cpu.description();
}
}
- 匿名内部类(重点)
格式:
new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
};
匿名内部类的使用(抽象类):
public class Computer {
public static void main(String[] args) {
new Cpu(){
@Override
public void description() {
System.out.println("我是电脑的cpu");
}
}.description();
}
}
abstract class Cpu {
public abstract void description();
}
从上述代码中,我们可以发现,我们直接通过匿名内部类的方式实现了抽象类中的方法的使用,而不是通过创建一个子类继承抽象类并且实现抽象类中的所有抽象方法,然后再创建子类对象之后调用子类的方法,直接一步到位。
匿名内部类的使用(接口):
public class Computer {
public static void main(String[] args) {
Cpu cpu = new Cpu(){
@Override
public void description() {
System.out.println("我是电脑的cpu");
}
};
cpu.description();
}
}
interface Cpu {
public abstract void description();
}
学到这里我们的java基础的重点知识就差不多了,让我们开始java高级吧!!!,欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。