1. 封装
1.1 什么是封装
把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位,尽可能隐藏对象的内部结构
1.2 为什么要封装
1、为了解决程序安全性的问题
2、屏蔽复杂,暴露简单
1.3 怎么完成封装
在java中通过4种“访问控制符”分别为private、default、protected、public,实现封装。所以在封装的过程中尽可能将访问权限降到最低
例如:使用访问权限private修饰成员变量
代码例如:
class Student{
private int id;
private String name;
}
如上代码对Student的成员进行了封装,进行封装后的成员变量后将不能直接访问,因为由private修饰的成员变量只能在本类中使用。
同时,如要对已封装的成员变量进行读取以及读写,要使用setter和getter方法,如下代码:
public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2. 继承
2.1 什么是继承
继承是在已有类的基础上创建新类的过程,已有类称为基类(父类),新类称为派生类(子类)
2.2 为什么要继承
继承主要实现重用代码,节省开发时间
2.3 如何进行继承
例如:
class 子类类名 extends 父类类名{
子类的成员定义和声明
};
2.4 继承过程中的注意事项
1、继承具有传递性
2、继承具有单向性
3、继承具有单一性,子类只能有一个父类,但是可以有多个子类
4、object类是所有类的祖先类,所有类直接或间接继承它
5、子类继承父类所有成员,但是私有或默认成员由于访问权限无法访问
6、子类不能继承父类的构造方法
7、子类对父类的对象引用,可以使用super.【父类成员名】方法
3. 抽象类与抽象方法
3.1.1 是什么抽象类
抽象类是是一种特殊的方法,可以包含抽象方法,具体方法和成员变量。但是抽象类不能被实例化,只能被子类继承并实现其中的抽象方法
3.1.2 如何定义抽象类
使用关键词abstract定义一个类,如下代码:
public abstract class Student { //类的成员方法与变量的定义与声明 }
3.1.3 抽象类的特点与使用
1、抽象类不能被实例化
2、拥有抽象方法的类一定是抽象类,反之不一定;
3、抽象类有构造方法,也可以有实例方法
4、拥有抽象方法的类比然是抽象类
5、当不需要创建某个对象时,可以使用抽象类
3.2.1 什么是抽象方法
没有方法体的方法是【抽象方法】
3.2.2 为什么要定义抽象方法
当一个方法的方法体的内部实现与不实现没有任何意义,不实现方法体时
3.2.3 抽象方法的特点
1、有抽象方法的类一定是抽象类,抽象的类里不一定有抽象方法
2、抽象类不能通过new 来实例化
3、抽象方法由abstract定义
4、抽象方法是一个不完整的方法,没有方法体
3.2.4 如何使用抽象方法
当子类继承父类的抽象方法时,需通过重写抽象方法进行使用,如下代码:
public abstract class MotoVehicle { public abstract void print(); }----------------------------------------------------------
public class Bus extends MotoVehicle{ @Override public void print() { System.out.println(seatCount+"的客车的日租费为:"+super.getPrice()); } }
4. 多态
4.1 什么是多态
同一个引用类型 ,使用不同的实例而执行不同操作 (即多种运行状态)
4.2 为什么要实现多态
解决程序的拓展性问题
4.3 怎么实现多态
1、子类必须覆写父类的方法
2、通过父类的引用调用子类重写的方法
多态实现的过程注意
3、编译时多态:在程序编译时,对象属于哪个类的方法则调用哪个类的方法
2、运行时多态:在程序运行时,根据父类的引用在找到对应的对象的实际类型,再调用该类型的方法。
重写方法的特点
1、方法名一致
2、参数一致
3、返回值一致
4、子类的访问修饰符不能严格于父类
重载方法的特点
1、方法名一致
2、参数列表不同
3、与返回值无关
tips
类创建时,会在方法区开辟一个空间以存储方法,因此方法都在方法区内