一、class(类)
- 可以继承类(仅限一个)
- 继承普通类:不一定要重写父类的所有方法
- 继承抽象类:必须重写父类的所有抽象方法,除非将自己定义为抽象类
- 只可继承父类【public、protected】的字段、方法(privated不可继承)
- 包含父类的构造方法
- 子类将从父类继承过来的方法的地址信息保存到自己的方法区
- 只具有包访问权限的字段、方法:只可被同一个包下的子类继承,不可被其他包下的子类继承
- 可以实现接口(支持多个)
- 必须实现父类的所有(抽象)方法,除非将自己定义为抽象类
- 可以同时继承类与实现接口(实现接口需写在继承类之后)
- class的修饰符
- public:作用域为【本包+其他包】,可以被其他任何类访问
- default(无声明时的默认修饰符):作用域为【包作用域】
- final:使用final修饰的类不可被继承
- abstract:使用abstract修饰的类被称为【抽象类】,天生为了被继承而设计的
- 抽象类不一定必须有抽象方法,并且可以有非抽象方法
- 不可被实例化:可通过将子类向上转型为父类实现实例化对象(Person person = new Stydent())
二、interface(接口)
- 只可以继承接口(仅限一个)
- 接口:不一定要重写父类的所有(抽象)方法
- 不能被实例化
- interface的修饰符
- public:作用域为【本包+其他包】,可以被其他任何类访问
- default(无声明时的默认修饰符):作用域为【包作用域】
- abstract:接口本身是抽象的,因此不需要显式地使用abstract修饰符进行修饰
- 接口下定义的field:被隐式定义为【public static final】
- 接口下定义的method:被隐式定义为【public abstract】
三、field(字段)
- field的修饰符
- public:作用域为【本包+其他包】,有访问本类的权限即可访问
- default(无声明时的默认修饰符):作用域为【包作用域】
- private:作用域为【本类】,无法被其他类访问,本类的嵌套类可访问
- protected:
- 可以被子类及子类的子类访问
- 在其他包下,不支持通过该类对象访问该类的protected字段,【只支持通过子类对象访问该类的protected字段】
- final:使用final修饰的字段为【常量】
- 只可在使用之前被赋值一次,不可被修改
- 如果定义时未赋值,则必须在构造方法或静态代码块中初始化
- final也可以修饰方法参数
- static:
- 使用static修饰的字段被称为【类变量、静态变量】,静态变量【属于类,而不属于实例】,所有实例字段所共享同一个静态变量
- 没有被static修饰的字段则被称【实例变量】,每一个实例字段拥有一个实例变量
- 内存分配:java虚拟机只在加载类的过程中为静态变量分配一次内存,而每创建一个实例,都会为实例变量分配一次内存
- 静态变量调用:
- 在【本类】的【静态方法】内,通过【类名/实例变量名.静态变量名】调用静态变量(类名可省略)
- 在【本类】的【实例方法】内,通过【this/类名/实例变量名.静态变量名】调用静态变量(this/类名可省略)
- 在【本包中的其他类】的【静态+实例方法】内,通过【类名/实例变量名.静态变量名】调用静态变量
- 实例变量调用:
- 在【本类】的【静态方法】内,通过【实例变量名.静态变量名】调用实例变量
- 在【本类】的【实例方法】内,通过【this/实例变量名.静态变量名】调用实例变量(this可省略)
- 在【本包中的其他类】的【静态+实例方法】内,通过【实例变量名.静态变量名】调用实例变量
四、method(方法)
- 【重写(即覆盖)父类的字段、方法后】或【子类出现与父类【同名】的字段、方法时】,会将父类同名的字段、方法隐藏掉,需要通过关键字【super】调用父类的同名的字段、方法
- method的修饰符
- public:作用域为【本包+其他包】,有访问本类的权限即可访问
- default(无声明时的默认修饰符):作用域为【包作用域】
- private:作用域为【本类】,无法被其他类访问,本类的嵌套类可访问
- protected:可以【本包+其他包】的子类及子类的子类访问,不支持在其他包通过该类对象访问该类的protected方法,但支持在其他包通过子类对象访问该类的protected方法
- final:使用final修饰的方法不可被重写
- abstract:使用abstract修饰的方法被称为【抽象方法】
- 抽象方法所在的类必须是抽象类
- 抽象方法不可以有具体的方法体
- 子类必须重写父类的方法体,除非将子类定义为抽象类
- static:
- 使用static修饰的方法被称为【类方法、静态方法】
- 在【本类】的【静态方法】内,通过【类名/实例变量名.静态方法名】调用静态方法(类名可省略)
- 在【本类】的【静态方法】内,通过【实例变量名.静态方法名】调用实例方法
- 在【本包的其他类】的【静态方法】内,无法调用静态方法、实例方法
- 没有被static修饰的方法则被称【实例方法】
- 在【本类】的【实例方法】内,通过【this/类名/实例变量名.静态方法名】调用静态方法(this/类名可省略)
- 在【本类】的【实例方法】内,通过【this/实例变量名.静态方法名】调用实例方法(this可省略)
- 在【本包的其他类】的【实例方法】内,无法调用静态方法、实例方法
- 内存分配:静态方法与实例方法都是随着类的加载而加载的,将结构信息存储在方法区
- 使用static修饰的方法被称为【类方法、静态方法】