1. this关键字
成员变量的隐藏
如果局部变量和成员变量同名,成员变量被隐藏
class a{
int x=98,y;
void f(){
int x=3;
y=x; //y得到的值是3,不是98
}
}
this关键字可以在方法中使用被隐藏的成员变量:
class a{
int x=98,y;
void f(){
int x=3;
y=this.x;
//this.x表示成员变量x
2. static关键字
- static修饰的变量和方法称作类变量和类方法。(静态方法)(不用static修饰的叫实例方法)
- 本质:类变量/类方法 是属于整个类的,而不是某个实例对象的。
- 格式:static 类型 变量名;static 类型 方法。(static int x; static void f(){})
- 类变量和类方法可以通过类名直接调用,也可以通过对象来调用。(对象也包含在该类中)
- 注意:类方法中不能使用this和super
不同对象的实例变量分配到不同的内存空间,但是所有对象的类变量分配到同一处内存,改变其中一个对象的该类变量会影响其他对象的该类变量,即对象共享类变量。
实例方法在该类创建对象后才分配入口地址;类方法在类的字节码加载到内存时就分配了入口地址,可以通过类名调用,因此类方法可以避免创建对象浪费内存
3. 访问限制修饰符
| 同一个类 | 同一个包 | 不同包中的子类 | 不同包中的非子类 | |
|---|---|---|---|---|
| private | yes | |||
| 默认 | yes | yes | ||
| protected | yes | yes | yes | |
| public | yes | yes | yes | yes |
- private和protected不能修饰类
- 访问权限从高到低public->protected->private
4. super关键字
- 作用:在子类中调用被子类隐藏的成员变量或方法。
4.1 调用父类的构造方法
- 子类不继承父类的构造方法。
- super必须是子类构造方法中的头一条语句
- 用法:super(参数)
4.2 操作被隐藏的成员变量和方法
用法:super.x , super.f()
-
注意:
- 如果子类构造方法没有写super来调用父类构造方法,系统默认有
super();语句来调用父类不带参数的构造方法 - 若类中定义了一个或多个构造方法,系统不提供默认的构造方法(不带参数的构造方法),因此在父类中定义多个构造方法时,要有一个不带参数的构造方法,否则子类省略super时会出错。
5. final关键字
final类
final class A{
...
}
final类不能被继承,即不能有子类
final方法
final修饰的父类方法,不能被子类重写。
final常量
final修饰的成员变量或局部变量为常量,在声明时必须给指定的值,且不能改变。
6. abstract关键字
abstract修饰的类叫抽象类,例如
abstract class A{
...
}
抽象方法,只允许声明,不允许实现,不允许final和abstract同时修饰一个方法
abstract int min(int x, int y);
- 抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类
- 抽象类不能用new运算符创建对象
如果一个非抽象类继承了一个抽象类,必须重写父类的抽象方法,给出方法体,去掉abstract修饰。 -
abstract类的对象可以作为子类的上转型对象来调用子类重写的方法。