一.重写与重载
1)重写(Override)
- 重写发生在父子类中,方法名相同,参数列表相同,方法体不同;
- 重写遵循运行期绑定,看对象的类型来调用方法;
2)重载(Overload)
- 重载发生在一个类中,方法名相同,参数列表不同,方法体不同;
- 重载遵循编译期绑定,看引用的类型来绑定方法。
备注:子类利用重写修改父类的方法。当子类对象的重写方法被调用时(无论是通过子类的引用调用还是通过父类的引用调用),运行的都是子类重写修改后的版本。
二.this的用法
- this.成员变量名----访问成员变量
- this.方法名----调用方法(不常用)
- this()----调用构造方法
三.super的用法
- 指代当前对象的父类对象
- super.成员变量名----访问父类的成员变量
- super.方法名----调用父类的方法
- super()----调用父类的构造方法
四.package包
- 避免类名冲突;
- 包名可以有层次结构,同包中的类不能同名;
- 类的完全限定名:包名.类名;
- 建议:包名所有字母都小写
备注:同包中的类可以直接访问;不同包中的类不能直接访问:①可以先import声明类,再访问类;②使用类的完全限定名;
五.构造方法
1.方法的重载(Overload):
发生在一个类中,方法名称相同,参数列表不同;编译器在编译时会根据签名自动绑定调用的方法;
2.构造方法:
- 给成员变量赋初值;
- 与类同名,没有返回值类型;
- 在创建对象时被自动调用;
- 若自己不写构造方法,则编译器默认一个无参构造方法;若自己写了构造,则不再默认提供;
- 构造方法可以重载。
六.访问控制修饰符
Java面向对象的基本思想之一是封装细节并且公开接口。Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别:
访问级别 | 修饰符 | 当前类 | 同包 | 其它包的非子类 | 其它包的子类 |
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | × | √ |
默认 | 无 | √ | √ | × | × |
私有 | private | √ | × | × | × |
#1:用protected修饰的变量及方法,包内的任何类及包外那些继承了该类的子类才能访问,protected重点突出继承;
#2:如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected及private中任何一种修饰),则其访问权限为default(默认访问权限);
#3:顶层类只能用public和default(默认)访问修饰符修饰;
#4:public修饰的类,类名必须与其所在的源文件名相同,一个.java源文件中有且只有一个public类;
#5:final修饰的类不能被继承,没有子类。
#6:abstract修饰的类不能被实例化,必须被子类继承。
protected属于子类限制修饰符,而default属于包限制修饰符。
七.static和final关键字
static:静态的
静态变量 | 静态方法 | 静态块 |
1.由static修饰; 2.属于类,存在于堆的方法区中,只有一份; 3.常常通过类名.变量名来访问; 4.通常将所有对象共享的数据保存在类变量中。 |
1.由static修饰; 2.属于类,存在于堆的方法区中,只有一份; 3.常常通过类名.方法名来访问; 4.静态方法中没有隐式的this传递,不能直接访问实例成员; 5.方法的操作仅与参数相关,而与对象无关。 |
1.由static修饰; 2.类被加载期间,自动执行一次,所以静态块也只执行一次; 3.常常用于初始化静态资源:如图片,音频,视频等。 |
final:最终的,不可变的
修饰变量 | 修饰方法 | 修饰类 |
1.变量不可被改变,必须在声明时进行初始化; 2.对象一旦创建不可改变,可在声明时初始化或在构造方法中进行初始化; |
方法不可被重写 | 类不可被继承 |
八. 抽象类和抽象方法
抽象方法由abstract修饰,只有方法的定义,没有方法的具体实现(连{}都没有),包含抽象方法的类必须被声明为抽象类,抽象类具有以下特点:
- 由abstract修饰;
- 类只要有抽象方法必定是抽象类,但抽象类不一定要有抽象方法;
- 抽象类不能被实例化;
- 抽象类是需要被继承的,由子类重写所有的抽象方法;
抽象类的意义:
- 封装子类共有的属性和行为,实现代码复用;
- 为所有子类提供一种统一的类型,即向上造型;
- 可以包含抽象方法,为所有子类提供了统一的入口,每个子类的实现虽然不太,但入口是一致的。
九. 接口
接口是比抽象类还抽象的类,只包含常量和抽象方法的类,使得设计和实现分离,具有以下特点:
- 是一个标准、规范的制定方;
- 是一种数据类型(引用类型);
- 由interface定义,只能包含常量和抽象方法;
- 接口不能被实例化
- 接口是需要被实现、继承的,实现类、子类必须重写接口中的所有抽象方法;
- 一个类可以实现多个接口,多个接口之间使用逗号隔开;
- 若又继承又实现,应先继承后实现;
- 接口可以继承接口,且接口支持多继承,类不支持多继承;
- 类、接口的继承均使用“extends”,接口的实现使用"implements"。
十. 面向对象三大特征
- 封装
- 类:封装的是对象的属性和行为;
- 方法:封装的是具体的业务逻辑功能;
- 访问控制修饰符:封装的是访问的权限;
- 继承
- 作用:实现代码的复用;
- 父类:所有子类共有的属性和行为;
- 子类:子类所特有的属性和行为;
- 子继承父后,子具有:父类+子类;
- 单一继承,多接口实现,传递性;
- 多态
- 意义:行为的多态,对象的多态;
- 向上造型,需要强制类型转换,通常用instanceof进行判断;
- 多态的表现形式:①重写:主要依据对象,属于运行时多态;②重载:主要依据参数,属于编译时多态。