访问修饰符
访问控制 | private | 缺省 | protected | public |
---|---|---|---|---|
同一类中的其他成员 | √ | √ | √ | √ |
同一个包中的其他类 | × | √ | √ | √ |
不同包中的子类 | × | × | √ | √ |
不同包中的非子类 | × | × | × | √ |
this关键字
-
this修饰属性,方法
this调用属性和方法,可以将this看成当前对象,在类中通常会省略this.
但是,特殊情况,如set方法的形参名和属性名相同时,就需要使用this来指明当前对象 -
this调用构造器
this([形参列表]) 用来在构造器中调用其他构造器
this([形参列表]) 调用构造器,在被调用的构造器中还可以调用其他构造器,但是注意: this调用构造器不能形成闭环
在构造器中使用this([形参列表])时,必须将该代码放在首行
super关键字
- “super.” 调用父类被重写的成员(属性/方法), 如果直接父类找不到, 就去间接父类找, 直到找到为止
- super([形参列表]) 用于在子类构造器中调用父类构造器, 必须写在构造器的首行
this和super使用的注意事项
this调用同类中其他构造器的代码和super调用父类构造器的代码都必须放在构造器的首行,所以二者在构造器中只能存其一,如果都没有声明的话,编译器默认调用super()
static关键字: static可以修饰属性,方法,代码块,内部类
- static修饰属性
静态属性/类变量(用staitc修饰) | 非静态属性/实例变量(不用staic修饰) |
---|---|
为所有对象共有,其中一个对象改变该属性,那么其他对象的该属性也会受影响 | 每个对象都有一份,互不干扰 |
可以通过"类名.属性名" 或者 "对象.属性名"调用 | 只能通过"对象.属性名"调用 |
-
static修饰方法
在静态的方法中只能使用静态的属性或静态的方法
在非静态的方法中既可以调用静态的属性/方法,也可以调用非静态的属性/方法 -
static修饰代码块
静态代码块 | 非静态代码块 |
---|---|
内部可以有输出语句 | 内部可以有输出语句 |
随着类的加载而加载,而且只执行一次 | 随着对象的创建而执行,没创建一个对象,就执行一次 |
在静态的代码块只能调用静态的属性和静态的方法 | 在非静态的代码块可以调用静态的属性,静态的方法,非静态的属性,非静态的方法 |
- static修饰内部类
实例化静态成员内部类: 外部类名.内部类名 varName = new 外部类名.内部类名();
final关键字: final可以修饰类,方法,变量
- final修饰类: 表示该类不能被继承了(绝后了…)
- final修饰方法: 表示该方法不能被重写
- final修饰变量: 此时的"变量"就称为一个常量,一旦赋值就不能修改
abstract关键字: abstract可以修饰类,方法
- abstract修饰类
1.抽象类不能实例化,生来就是被继承的
2 抽象类中可以存在构造器,虽然它不能用构造器创建对象(并初始化),但是继承它的子类可以使用它的构造器对对象的属性进行初始化 - abstract修饰方法
1.抽象方法没有方法体
2 包含抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法
3 子类继承抽象类, 要么全部重写该子类的直接父类和间接父类中定义的抽象方法,要么这个子类也要声明为abstract的
4 abstract不能修饰静态的方法,私有的方法,final的方法,final的类