类
构造函数
- 和类名一致
- 可以进行重载
- 不可以重写
- 没有返回值
- new 调用
- 如果没有自定义的构造函数,那么java会创建一个无参构造函数
- super this(位于构造函数中有效代码的第一行)
隐式参数和显式参数
- this 指向的是 谁调用这个方法就指向谁
public void setSex(int sexGet){
this.sex = sexGet;
//此处的this即为下文中的对象s,是该函数的隐式参数
//sexGet为显示参数
}
Student s = new Student();
s.setSex(1);
方法参数
- Java中都是按值传递(在栈中从新clone出来的)
static
- 所标记的方法、变量为类所有,无需通过对象调用
方法的重写和重载
- 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
- 重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
返回值类型不是方法签名的一部分
⭐类的初始化顺序
- 在类第一次加载的时候,依照定义顺序的顺序对静态域进行初始化操作
- 随后在每次调用构造器的时候
- 将所有数据域都初始化为默认值(0、false或null)
- 按照在类声明中出现的次序、依次执行所有域初始化语句和初始化块
- 如果构造器第一行调用了第二个构造器,即执行第二个构造器的主体
- 执行这个构造器的主题。
⭐理解方法调用
1、编译器查看对象声明类型和方法名
2、编译器将查看调用方法时提供的参数类型
3、如果是private、static、final方法或构造器,编译器可以很准确的指导调用的时哪个方法(静态绑定)。
4、虚拟机在对象所声明的类里面进行查找,若没有则查找该类的父类。(动态绑定)
为节约时间,虚拟机预先为所有类创建一个方法表,其中列出了所有方法的签名和实际调用的方法。调用方法时,虚拟机只需要查找这个表。
面向对象设计
- 理解:
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 - 特点:封装、继承、多态
多态
优点:
- 提高代码安全
- 提高代码复用性
- “高内聚”:封装细节,便于修改内部代码,提高可维护性
- “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作
抽象类和接口
- 抽象类
- 父类知道子类一定要完成的某个功能,但是每个子类有自己的完成方式
- 子类以后只用自己重写的功能,而不用父类的功能,就可以将对应的功能在父类中定义成抽象方法
- 抽象类是为了约束子类必须拥有而且必须重写某个固定的抽象方法
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
- 接口和抽象类的区别:
(1)抽象类可以有构造方法,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含静态方法,接口中不能包含静态方法
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承
(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
- 接口和抽象类的相同点:
(1) 都可以被继承
(2) 都不能被实例化
(3) 都可以包含方法声明
(4) 派生类必须实现未实现的方法