一. 类的封装
1.封装的概念
面向对象语言的封装包含两个含义:
- 类是数据以及对数据操作的封装体
- 信息隐蔽,即尽可能隐蔽对象的内部细节
封装的原则:要求使对象以外的部分不能随意存取对象的内部数据(属性),使软件错误能够局部化。
2.封装的步骤
- 修改属性的访问修饰符来限制对属性的访问。要限制类的外部对类成员的访问,可以使用访问修饰符private来修饰属性。
- 为每个私有属性创建一对赋值方法set()和取值方法get(),用于对属性的访问。
二.访问权限
Java中有4种访问控制:public、protected、private及默认访问控制级(default)。
类成员可以有Java提供的4种访问控制级别中的任意一种。
类成员访问级别
访问级别 | 其他包中的类 | 同一个包中的类 | 不同包的子类 | 同一个类 |
---|---|---|---|---|
public | 是 | 是 | 是 | 是 |
protected | 否 | 是 | 是 | 是 |
default | 否 | 是 | 否 | 是 |
private | 否 | 否 | 否 | 是 |
- public访问控制修饰符用来使一个类成员公开化,属于任何包的任何类都可以访问类的公有成员,而与其来源无关。一般只有确定外部对象对成员的访问不会危及此对象的完整性时,才会将成员用public声明。
- protected访问控制修饰符也用来使一个类成员公开化,但是该类成员的公开化程度不及public修饰的成员,它仅可以被这个类本身、其子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
- private访问控制修饰符则是使一个类成员私有化,被限定为private的成员只能被这个类本身访问。
- 类中不加任何访问修饰权限限定的成员属于缺省的访问状态,具有默认访问级别,可以被这个类本身和同一个包中的类所访问。
方法私有:只给自己调用
方法公开:声明公开 实现隐藏,实现的改变对架构的影响最小
三、继承
继承是面向对象编程的一项非常重要的特征。Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
在面向对象编程中,这种通过创建一个新类而对一个类进行拓展的过程称为继承。
子类继承父类的属性和方法,同时也可以修改父类的属性或重载父类的方法,以及在父类的基础上添加新的属性和方法。但是构造方法不能继承。
定义父类:
父类可以是系统类,也可以是自定义类。
在父类中只定义一些通用的属性与方法。
定义子类:
[类修饰符] class 子类名 extends 父类名{}
访问控制修饰符
- private 私有 不能继承
- default 本类 + 同包 同包子类可以继承
- protected 本类+同包+不同包的子类 可以继承
- public 公开 可以继承
单继承:一个子类只能有一个直接父类,类之间会形成简单的树状结构。
super关键字
super用来引用继承自父类的成员,用法
- 调用父类的构造方法时,默认调用无参的方法,想要指定调用,就要用super。super常常用来把构造参数传给父类,去设置父类属性。
super必须是构造方法的第一个语句。如果一个构造方法的第一句话,不是this(…),也不是super(…),系统会默认添加super(); - 操作被隐藏的成员变量和被覆盖的成员方法
对象的构造过程:
- 分配空间 本类+父类,一并分配
- 递归的构造父类对象(2-4步)
- 初始化本类属性
- 调用本类构造方法
如A<------B
1.分配空间
2.初始化A属性
3.调用A构造方法
4.初始化B属性
5.调用B构造方法
class Super{
protected int a = 10;
}
class Sub extends Super{
int a = 20;
public void print(){
int a = 30;
System.out.println(a); //30
System.out.println(this.a); //20;
System.out.println(super.a); //10
}
}
四、多态
多态指的是拥有相同的形式,但根据不同的情形拥有不同的机能的特点。
- 对象类型不变
- 只能对引用调用其引用类型中声明的方法
- 运行时,根据对象实际类型找子类覆盖之后的方法
子类的对象可以看做是父类的对象,子类的对象可以放入父类引用。
子类引用赋值给父类引用,可以直接赋值。
父类引用赋值给子类引用,必须强制类型转换,保证编译通过运行时可能发生类型转换异常。
多态的作用:将不同的子类对象统一看做父类对象,屏蔽了不同子类的差异。