Java面向对象 二
系列文章目录
Java面向对象 一-CSDN博客
Java面向对象 三-CSDN博客
目录
系列文章目录
前言
一、继承
1. 继承的概念
2. 父类和子类成员的访问
3.子类的构造方法
3. this 和 super
4. 初始化
5. final 关键字
二、多态
1. 多态的实现条件
2. 向上转型
3. 方法重写
4. 动态绑定
5. 重写和重载的区别
6. 向下转型
7. 多态的思想
前言
java 是一门面向对象的编程语言,本文介绍 java 面向对象编程的基础内容。
一、继承
1. 继承的概念
面向对象的思想中有继承的概念,继承允许保持原有类的特性,并在这个基础上扩展,增加新功能;
通过继承产生的类叫做子类/派生类,被继承的类叫做父类/基类;
继承的目的是对子类的共性抽取,实现代码复用;
java 中使用 extends 关键字来实现继承;
2. 父类和子类成员的访问
成员变量的访问:
this 可以访问父类的成员变量,也可以访问子类的成员变量;super 只能访问父类的;
当子类和父类中有同名的成员变量,子类访问时优先访问自己的;如果一定要访问父类的,就需要用到关键字 super;
成员方法的访问
this 可以访问子类和父类的成员方法,super 只能访问父类的;
当子类和父类具有同名方法,如果参数列表不同可以构成重载,子类可根据参数列表访问对应方法;如果参数列表相同,则优先访问子类的方法;如果要访问父类的方法,也需要使用 super 关键字进行访问;
3.子类的构造方法
子类继承父类后,需要先构造父类,再构造子类本身;
具体的实现方式:在子类的构造方法中,使用 super 调用父类的构造方法;
调用父类的构造方法目的是初始化从父类继承过来的成员变量,再调用自己的构造方法初始化新增加的成员变量;
使用 super 调用父类的构造方法时,只能写在第一行;在子类的构造方法只能出现一次,并且不能和 this 同时出现。
3. this 和 super
相同点:
this 和 super 都是关键字;
都只能在类的非静态方法中使用,访问非静态成员变量和方法;
在构造方法中调用时,都只能出现在第一行,并且 this 和 super 不能同时存在;
不同点:
this 可以访问父类和子类的成员变量和方法,super 只能在子类中访问从父类继承下来的成员变量和方法;
在构造方法中,this() 调用本类的构造方法,super() 调用父类的构造方法,两种调用不能同时在构造方法中出现;
如果存在继承关系,构造方法中一定会出现 super() 调用,用户不写编译器也会增加;this() 如果用户不写,则没有;
4. 初始化
如果父类和子类都存在静态代码块和实例代码块,初始化的时候代码的执行顺序为:
父类静态代码块,子类静态代码块,父类实例代码块,父类构造方法,子类实例代码块,子类构造方法;
原因:
静态代码块在类加载的时候就会执行,实例代码块在创建对象的时候才会执行,因此是静态代码块执行顺序优先于实例代码块;
创建对象的时候子类需要先帮父类进行构造,而实例代码块的执行顺序优先于构造方法,因此 new 对象的时候,一定会先执行父类的实例代码块,再执行构造方法,接下来才是子类的实例代码块和构造方法;
5. final 关键字
final 修饰的类不能被继承,被 final 修饰的类称为密封类,例如 String;
二、多态
1. 多态的实现条件
必须在继承体系下,实现了向上转型;
子类对父类的方法进行重写;
使用父类的引用调用重写的方法;
2. 向上转型
使用父类 new 一个子类的对象,例如:Animal animal = new Dog(),这时候 Dog 就发生了向上转型;
通过方法传参:子类引用传给方法中父类参数的位置,也会发生向上转型;
通过返回值返回:返回子类对象,子类对象也会发生向上转型;
3. 方法重写
子类存在和父类方法名,参数列表,返回值(可以是父子类关系)都相同的方法,那么子类就重写了父类的方法;
注意事项:
被 private,static,final 修饰的方法,不能发生重写;
子类的访问权限一定要大于等于父类的访问权限;
构造方法不能重写;
4. 动态绑定
静态绑定:编译时,确定了调用哪个方法;
动态绑定:运行时,发现子类重写了父类的方法,就调用子类重写的方法;
发生向上转型后,通过父类引用调用重写的方法,代码运行时会执行子类重写的方法,就叫动态绑定;
5. 重写和重载的区别
子类中存在和父类方法名,参数列表,返回值都相同的方法,就发生了方法的重写;
同一个类中,存在方法名相同,参数列表不同的方法,就发生了发方的重载;
重写:方法名,参数列表必须相同,返回值相同或者为父子类关系,访问权限不能降低;
重载:方法名相同,参数列表必须不同,返回值可以不同,权限可以改变;
6. 向下转型
向下转型:把父类对象转化为子类对象,不一定能转型成功;
因此在转换之前一定要用关键字 instanceof 判断对象发生向上转型前是否为子类对象;
7. 多态的思想
通过父类引用不同的子类的对象,调用同一个重写的方法,表现得行为不一样,这种思想叫做多态;
多态适用于方法,不适用于属性和构造方法;