一、封装
封装------>封+装------>将类中的信息进行一个隐藏封存
封装指的是将Java中的信息给隐藏起来,对于这些信息操作我们可以通过定义一个方法暴露出去
对于封装通常指的是将Java中的属性的操作进行隐藏(对外不可见),我们可以提供一个用于操作该方法暴露出去以供外界调用
1.2封装的简单使用
private 数据类型 成员变量名;
1、获取属性的get方法------外界可以通过此方法访问被私有化了的属性
public 返回值类型(对应属性的数据类型) get成员变量名(){
return 成员变量名;
}
2、给属性赋值的set方法------外界可以通过此方法给私有化了的属性赋值
public void set成员变量名 (数据类型 形参名){
对变量进行赋值操作
}
1.3对象的格式化输出
toString()方法可以完成对对象信息的格式化输出,如果一个类中没有去重写toString方法则我们在打印对象的时候默认输出的是对象的内存地址
二、继承
继承简单的说就是子类继承父类即子类可以通过继承去拥有父类的所有成员,并且子类还可以有自己的独特成员,换句话就是长江前浪推后浪一浪更比一浪强
在Java中子类继承需要通过关键字extends
需要注意的是Java继承是单继承的
2.1属性
子类继承父类以后,那么子类就可以拥有父类的所有属性,对于父类的私有属性我们不能直接去访问,但是我们可以通过父类提供的对应方法去间接访问
子类可以得到父类的所有属性好处:减少代码量,对于一些重复使用的属性
子类中的属性可以和父类的属性重名,但是不推荐写
2.2方法
子类继承父类以后,那么子类就可以拥有父类的所有方法,对于父类的私有方法我们不能直接去访问,但是我们可以通过父类提供的对应方法去间接访问
需要注意的是:子类继承了父类的方法以后,子类还可以对其进行重写(覆盖),好比与我们从父母学到了一门吃饭的手艺,对此我们可以继承这门手艺,同时还可以根据我们自身的情况以及实际情况去改进
方法的重写:
a、权限修饰符
子类的权限修饰符必须要大于或等于父类的权限修饰符,private不能被重写
b、其他修饰符:
父类中的方法不能使用final修饰符,static也不能被重写
c、返回值类型
(1)基本数据类型:重写的方法(子类)和被重写的方法(父类)的返回值类型要保持一致
(2)引用数据类型:被重写的方法(父类)的返回值类型要大于或等于重写的方法(子类)的返回值类型
d、方法名
方法名要保持一致
e、参数列表
参数列表保持一致
方法重写和方法重载的区分:
a、位置:方法的重载是发生在同一个类中
方法的重写发生在子类和父类中
b、方法名:都需要保持一致
c、参数列表:方法重载要求参数列表不一致
方法重写就必须要一致
d、权限修饰符:方法的重载和权限修饰符无关
方法的重写要求重写的方法的权限修饰符要大于或等于被重写的方法的权限修饰符
e、其他修饰符:方法的重载没影响
方法的重写不能使用static、final关键字(被重写的方法)
f、返回值类型:方法的重载没影响
方法的重写要求:基本数据类型:要保持一致
引用数据类型:重写方法的返回值类型要小于或等于被重写方法的返回值类型
2.3构造器
子类继承父类必须至少要调用父类中的一个构造器,默认调用的是父类的无参构造
问题:子类为什么要去调用父类中的构造器?
子类在继承父类的时候去初始化父类
子类中的构造器都需要直接或间接的去调用父类中的构造器,默认调用的是无参构造,若父类中没有无参构造,那么我们就需要使用super(实际参数)的形式去调用父类中的构造器
注意:super(实际参数)只能出现在行首------>super(实际参数)和thisI(实际参数)只能出现一个
三、多态
3.1向上转型
父类引用指向子类对象
Father father = new Son();
例子:花木兰替父从军
向上转型编译看左边执行看右边
向上转型调用属性的时候是调用的是父类的,同时还可以调用父类和子类共有的方法
这个共有的方法的执行结果是执行子类的
3.2多态
多态的定义:不同的对象对同一个行为表现不同的状态
在程序运行时根据场景的不同从而调用不同的对象使得同一个行为可以表现出不同的状态
方法的重载也可以简单的看成一个多态
多态的必要条件:
1、继承
2、向上转型
3、方法的重写
多态的优点:
1、消除类型之间的耦合关系
2、可替换性
3、可扩充性
4、接口性
5、灵活性
6、简化性
多态的案例:
上面的花木兰替父从军也是多态的一种案例