static静态关键字
- 静态成员变量(类变量),可以被类的所有对象共享(访问、修改)
- 访问格式:
类名.静态成员变量
(推荐)、对象.静态成员变量
(不推荐) - 属于类、加载一次,内存中只有一份
- 出现顺序:类加载 --> 静态变量创建 --> 创建对象 --> 成员变量
- 访问格式:
- 静态方法(类方法)
- 访问格式:
类名.静态成员方法
(推荐)、对象.静态成员方法
(不推荐) - 静态方法只能访问本类的静态成员,静态方法中不能使用super、this关键字
- 访问格式:
- 静态方法应用-工具类
- 工具类不需要创建对象,其构造器私有化处理
- 静态方法应用-静态代码块
- 代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类)
- 静态代码块
static{ ... }
执行时间:静态代码块随着类的加载而执行,只执行一次- 触发类加载的情况:1、首次创建对象;2、调用类的方法;3、在类中运行main方法
- 构造代码块
{ ... }
执行时间:构造代码块随着构造方法的调用而先执行,每次调用构造方法时,构造代码块都会执行
继承
定义:继承是将多个类的相同属性和行为抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独这个类即可使用这些属性和行为了。多个类称为子类(派生类),单独的这个类称为父类(基类 或超类)
格式:
public class 子类名 extends 父类名 { }
特点:
- Java类只支持单继承,不支持多继承,但支持多层继承
- 子类可以继承父类的私有成员,但是子类不能直接访问
- 子类不可以继承父类的构造方法(构造方法名必须和类名相同)
内存结构:子类对象的内存空间中存在父类空间和子类空间,子类对象创建时,会先完成父类空间的初始化(默认先执行父类的无参构造方法,在子类的所有构造方法的第一行默认有super(),表示调用父类的无参构造方法)
super(...)与this(...):可以用来访问父类/本类的构造方法
public User(String name, int age){ this.name = name; this.age = age; } public User(String name, int age, String school){ this(name,age); //调用本类的两个参数的构造方法,降低代码的重复率 this.school = school; }
方法重写
- 方法名、参数列表、返回值类型都保持不变
- 注意点:返回值类型通常保持一致,基本数据类型不能改变,但引用数据类型可以改为比原方法更小的类(包含关系)
- 子类重写后的方法,访问权限要大于等于父类方法的权限。(权限从小到大: private、缺省不写、protected、public)
- protected权限修饰符:在不同包的子类中只能通过子类对象去访问
- 私有方法和静态方法不能被重写
权限修饰符
修饰符/作用范围 | 同一个类中 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
---|---|---|---|---|
private | ✓ | |||
缺省 | ✓ | ✓ | ||
protected | ✓ | ✓ | ✓ | |
public | ✓ | ✓ | ✓ | ✓ |
public class Zi extends Fu {
public static void main(String[] args){
Zi zi = new Zi();
zi.protectedMethod(); //注:protected不同包下的之类可以访问,是指可以通过继承了父类的该子类对象进行访问
}
}