面向对象有三大特点: 封装,继承,多态

封装

.封装:其实就是对一些细节进行隐藏,对外界不可见

java中封装的体现:

1.方法其实就是一种封装

Java文件中有两个公共类 java公共类有什么特点_Java文件中有两个公共类


2.private也是一种封装

权限: private < 默认 < protected < public

private关键字:

1. private是一个权限修饰符,代表最小权限。
2. 可以修饰成员变量和成员方法。
3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。

private 修饰成员变量:

格式: private 数据类型 成员变量名;

private 修饰成员方法:

把public关键字 改成 private关键字
private void 方法名();

封装就是隐藏对象的属性和实现方式,提供一个公共访问的平台。
好处:

1.提高安全性
隐藏实现的方式,提高公共访问的平台
2.提高代码的复用性
原则;
把不需要对外提高的代码进行隐藏
把属性隐藏,提高公共访问平台

对属性的封装:

1. 使用 private 关键字来修饰成员变量,来达到隐藏属性的目的
2. 对需要访问的成员变量,提供公共的访问方式,也就是定义 getXxx方法 、setXxx 方法。

继承

1.继承的概述
现实生活中继承:子承父业,用来描述事物之间的关系
代码中继承:就是用来描述2个类之间的关系,并且子类拥有父类的成员变量和成员方法
2. 继承的格式:

public class 类A extends 类B{

}

即:类A继承类B,类A是子类,类B是父类

继承的好处:

1.提高代码的复用性
2.可以让类与类之间产生关系,形成多态的条件

3.继承的特点:

1.子类拥有父类的成员变量和成员方法
2.子类只能直接访问父类的非私有成员,不能直接访问私有成员(成员变量和成员方法)
3.java中的继承只能单继承,不能多继承(相当于我们人只能有一个亲爹)
4.java中可以多层继承(儿子有爸爸,儿子有爷爷)

4.继承后如何访问成员变量

父子类中不同名的成员变量: 正常访问,无影响
父子类中同名的成员变量: 遵守就近原则
优先在局部位置找,如果局部位置有该变量,就直接使用,如果没有,就去本类成员位置找,如果有,就直接使用
如果本类成员位置没有,那么就去父类的成员位置找,如果有就直接使用,如果没有就报错

5.继承后如何访问成员方法:
父子类未出现同名的方法:正常访问
父子类中出现同名的方法: 优先调用子类中的方法

方法的重载:在同一个类中,出现多个同名的方法,参数列表不同,与返回值类型,修饰符无关
方法的重写:子类中出现和父类中一模一样的方法(包括返回值类型,方法名,参数列表)

方法重写的注意事项:

1.重写的方法必须要和父类一模一样(包括返回值类型,方法名,参数列表)
2.重写的方法可以使用@Override注解来标识
3.子类中重写的方法的访问权限不能低于父类中方法的访问权限 即 重写---子类对应的修饰符大于等于父类、返回值类型相同、方法名相同、参数列表相同

权限修饰符 : private < 默认(什么都不写) < protected < public

为什么要重写方法?

1.当父类中的方法无法满足子类需求的时候,需要方法重写
2.当子类具有特有的功能的时候,就需要方法重写

6.继承后如何访问构造方法:

访问父类的空参构造方法: super();
访问父类的有参构造方法: super(实际参数);

注意事项:

1.构造方法不能被子类继承,但是可以使用
2.子类的空参构造方法会默认调用父类的空参构造方法
3.子类的有参构造方法也会默认调用父类的空参构造方法
4.在子类中使用super()访问父类的空参构造方法必须放在第一行
5.在子类中使用super(实参)访问父类的有参构造方法必须放在第一行

7.super关键字的使用

super关键字的三种用法:
访问父类的成员变量:super.父类成员变量名
访问父类的成员方法:super.父类成员方法名(实参);
访问父类的构造方法:
访问父类的空参:super();
访问父类的有参:super(实参);

8.this关键字的使用
this关键字的三种用法:

访问本类的成员变量: this.本类成员变量名   常用
访问本类的成员方法: this.本类成员方法名(实参);  基本不用
访问本类的构造方法:  基本不用
访问本类的空参: this();
访问本类的有参: this(实参);

注意:

1.访问本类的空参或者有参都需要放在第一行
2.不能同时有参调用空参,空参再调用有参

多态

1.多态的概述
什么是多态呢?
多态指的是: 同一种行为,对于不同的事物具有不同的表现形式。 这就叫做多态。
程序中的多态:指同一个方法,对于不同的对象具有不同的方法体

多态的条件:

1.要有继承\实现
2.要有方法的重写
3.要有父类的引用指向子类的对象(接口的引用指向实现类的对象)

2.多态体现的格式:

父类类型 变量名 = new 子类对象;
变量名.方法名(实参);
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。

注意:

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。

3.多态中的成员访问特点:
访问成员变量:

编译看左边,运行看左边
访问成员方法:
非静态成员方法:
编译看左边,运行看右边
静态成员方法:
编译看左边,运行看左边

记忆: 只有非静态成员方法才会编译看左边,运行看右边,其他的都是编译看左边,运行看左边

多态的好处:使用父类类型作为方法的参数,可以接收该类所有的子类对象
tips: 如果方法的参数是Object类型,那么就可以接收任意类的对象

4.多态的使用—引用类型转换
多态的转型分为向上转型与向下转型两种:

4.1向上转型
向上转型:其实就是把子类类型的对象 赋值给 父类类型的引用,这个过程是自动转换的,类似基本数据类型的自动类型转换

使用格式:
父类类型  变量名 = new 子类类型();

4.2向下转型
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。类似基本数据类型的强制转换类型。
一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。

使用格式:
子类类型 变量名 = (子类类型) 父类变量名;

5.为什么要转型呢?

多态的弊端: 无法调用子类特有的方法
其实就是父类的引用不能调用子类独有的方法。

6.类型转换异常: ClassCastException
向下转型一旦没有注意,就会出现类型转换异常:ClassCastException,那么应该在转型之前先判断一下是否能转型
instanceof 关键字
作用:为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验。

格式:
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。