一、封装
1. 目前的程序无法保证数据的安全性,容易造成业务数据的错误
2. private(私有的):被private修饰的内容只能在本类中访问
3. 为私有化的属性提供公开的get和set方法:
(1)get方法:获取私有化属性值
public int getAge() {
return age;
}
(2)set方法:为私有化属性赋值
public void setAge(int _age){
if(_age >= 0 & _age <= 160){
this.age = _age;
}else{
System.out.println("年龄数据不合法!");
}
}
二、继承
1. 水笔 是一种 笔
水杯 是一种 容器
狗 是一种 动物
-> A is a B
如果A is a B关系成立,则A和B之间具有继承关系
A-子类 继承 B-父类
1. 理解
(1)继承(extends)体现的是类之间的一种“is a”关系
(2)语法:
class 子类类名 extends 父类类名
{
// 代码块
}
(3)通过继承关系,子类型可以直接使用父类中定义的属性和方法
2. 继承体现了程序的复用性和可扩展性
3. 方法的覆盖(也被称为方法的重写)(override)
(1)方法的覆盖:子类中定义和父类中相同的方法
(2)方法覆盖的要求:
a. 子类的方法名、形参列表、返回值类型必须和父类一致
b. 子类的访问修饰符,和父类相同或是比父类更宽
(3)如果子类覆盖了父类的方法,则优先使用子类覆盖后的
(4)注意:如果子类中定义了和父类方法名、形参列表相同,但是返回值不同的方法,则编译报错
(5)如果子类定义了和父类方法名相同、形参列表不同的方法,则编译通过、运行也通过,构成了方法的重载
4. Java中继承特点
(1)一个父类可以有多个直接的子类
(2)一个子类只能有一个直接的父类,但是可以有多个间接的父类(多级继承),Java中的类是单级继承
5. Java中的访问修饰符:
(1)访问修饰符代表一种访问权限
(2)Java中有4个访问修饰符:
private:
default:
protected:
public:
(3)访问修饰符的访问权限
本类 | 同包 | 非同包子类 | 非同包非子类 | |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
(4)访问修饰符内容的继承性
private修饰的属性和方法不能被继承
default修饰的属性和方法允许同包子类继承
protected修饰的属性和方法允许同包和非同包继承
public修饰的属性和方法允许所有子类继承
6. super的应用:
(1)super. 引用在子类的方法中,代表访问父类中的属性或成员方法
super.属性名 super.成员方法名(实参)
(2)super()
a. 创建子类对象时,jvm默认创建一个父对象,而且默认使用父类中无参数的构造方法完成父类对象的创建
b. super()、super(实参):应用在子类的构造方法的第一行有效语句中,代表创建子类对象时,告知 jvm 完成父类对象创建时采用哪一个构造方法完成对象的创建
c. 如果子类的构造方法第一行没有指定super()/super(实参),则默认添加super()
三、多态
1. 理解:
(1)多态:父类型的引用存储不同子类型的对象
父类类名 引用名 = new 子类类名();
引用 对象
父类型 子类型
(2)使用父类型的引用调用属性或方法,只能调用父类中定义的属性和方法
(3)如果子类覆盖了父类中的方法,则优先调用子类覆盖后的方法
2. 引用之间的转换
(1)父类型的引用赋值给子类型的引用,需要强制类型转换
大类型 小类型
a. 子类类名 引用名 = (子类类名)父类型的引用名;
b. 强制类型转换的结果:
i)实际存储的对象类型和要转换的类型一致,编译+运行通过
ii)实际存储的对象类型和要转换的类型不一致,编译通过,运行报错,错误信息为:java.lang.ClassCastException(类型转换异常)
(2)子类型的引用赋值给父类型的引用,无需强转,直接赋值
(3)双方没有继承关系,不允许相互赋值,强制类型转换也不允许
3. Instanceof避免类型转换异常:
(1)语法:引用名 instanceof 类名
(2)执行:判断引用中存储的实际对象类型是否兼容与后面的类型(是否作为后面类型的一种),兼容-true,不兼容-false
(3)作用:可以在程序设计中避免类型转换异常
4. 多态的应用
(1)多态应用在形式参数上:本类型+所有的子类型对象、引用都可以作为实际参数进行传递
(2)多态应用在返回值上:本类型+所有子类型的对象、引用都可以作为返回值进行返回