三大特性(封装,继承,多态)
封装:对数据进行保护,通过访问修饰词private限制访问权限。再添加get/set方法对其访问。(get/set方法内可以添加if语句对所传参数进行判断,从而决定下一步操作。get/set封装更符合生活,对数据进行保护)
继承:类于类之间是si a 关系。子类继承父类, 从而可以获取父类中部分的方法、属性。
注意:
-
java是单继承,一个类只能有一个直接的父类。单继承关系才 能才能形成简单树状结构
-
子类是否可以继承父类的属性、方法,取决去父类中属性和方法的访问修饰符。
-
访问修饰符 访问范围 继承性
private 本类内部 不可继承
(default) 本类+同包 同包下子类可以继承
protected 本类+同包+子类 可以继承
public 公开 可以继承
-
构造方法:不可继承(构造方法支持重载)
-
继承要满足里氏代换原则,否则我们的代码容易出现一些思想上的问题。
-
组合/覆合复用原则:对于违反里氏代换原则的两个类,由于不存在is-a的关系,所以不能继承。可以用组合的方式实现代码的复用
-
多态:
-
覆盖:方法名,参数列表,返回值类型相同;子类的访问修饰符比父类的访问修饰符相同或更宽;父类要比子类抛出更多更宽泛的异常。
-
重载:方法名相同,参数列表不同·(数据类型、顺序、个数)。与访问修饰符、返回值类型,抛出的异常无关。
-
对象创建的过程:
例子:创建对象c c继承了对象b b继承了对象a
a—>b---->c
执行顺序如下:
1.分配空间
2.初始化a的属性
3.执行a的构造方法
4.初始化b的属性
5.执行b的构造方法
6.初始化c的属性
7.执行c的构造方法
-
super关键字的使用和注意事项:
- 第一种应用super()
1.super()/super(实参):用于子类的构造方法中,代表创建父类对象时,指示JVM利用哪一个构造方法完成父类对象的创建;而且必须放在子类构造方法中的第一行有效语句。
2.注意:
①如果子类构造方法中的第一行没有定义super()/super(实参),则JVM会默认在第一行添加super()
②一个构造方法中不能同时定义this()/this(实参)和super()/super(实参)
-
第二种应用super.
①super.用于子类的构造方法或是成员方法中,调用父类的属性和父类的成员方法
②super.父类属性名 / super.父类中的成员方法名(实参);
-
多态:子类对象可以赋值给父类引用
- 只能对引用调用其引用类型中声明的方法
- 运行时,根据对象的实际类型,调用子类覆盖之后的方法
- 引用转换类型时,只能用于父类引用赋值给子类引用。需用instanceof关键字判断是否兼容
-
多态的意义
- 把不同的子类对象看做是父类进行处理。屏蔽不同子类之间的差异 通用性
- 多态用在参数上 m(A a); m方法允许A或A的子类作为参数
- 多态用在返回值上 A m(); m方法允许返回A对象或是A的子类对象