2019.12.23javase面向对象高级特性:
继承(inheritance):
-
也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实
-
现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个
-
已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容
-
继承简化了人们对事物的认识和描述,有益于软件复用,是OO技术提高
-
软件开发效率的重要原因之一
-
是类之间的一种关系,一般类与特殊类之间的关系
-
继承关系的语义:“is a kind of”
封装(encapsulation): -
所谓封装是把对象的属性和行为结合在一个独立的系统单位内部
-
尽可能隐蔽对象的内部细节,只向外部提供接口
-
降低对象间的耦合度
-
封装的重要意义:
-
使对象能够集中而完整地描述并对应一个具体事物
-
体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据
多态(polymorphism): -
指同一个命名可具有不同的语义
-
OO方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以
-
具有不同的数据类型或表现出不同的行为,对于子类,可用不同的方法
-
替代实现父类的服务的方法
一、继承
继承的语法规则:
<修饰符> class 子类名 extends 父类名{}特点:
每个类只能有一个父类
一个父类可以有多个子类
子类拥有父类的属性和方法调用构造方法:执行子类构造函数时自动执行父类构造函数
this
作用:调用本类的构造器
只能写在构造器的第一行
super
作用:调用父类的构造器
只能出现在子类的构造器中,且必须是第一行
super()中的参数,决定了调用父类哪个构造器
如果子类构造其中没有super关键字,编译器会自动添加supper(),调用父类的空构造函数在同一个构造器中super()和this()不能同时出现
二、封装
1、使用访问权限修饰符对类的成员进行控制,在Java中称为“封装”。
2、用来控制类的成员和类的使用范围
封装
作用:隐藏类的实现细节
可以通过特定的方法对属性进行访问和复制,方便控制属性的输入
可以检查数据
权限修饰符:
同一个类 同一包中的类 不同包的子类 其他包中的类
private √
default √ √
protected √ √ √
public √ √ √ √
public > protected > default > private
拓展:重写和重载
1、@Override//表示重写(覆盖),对父类的方法重新实现
2、/**
* 方法的覆盖
* 子类中的方法名与父类相同,实现方法不同。
* 子类继承父类,方法名相同、参数列表相同、返回值相同
*
* 方法的覆盖需要满足的条件
相同的方法名
相同的参数列表(参数数量、参数类型、参数顺序都要相同)
相同的返回值类型
方法的重载
在同一个类中,方法名相同,参数列表不同(参数的个数或参数类型)
*/
1、抽象类
/**
抽象类:包含了抽象方法的类
抽象方法:
[访问权限修饰符] abstract 返回值类型 抽象方法名 (参数列表) ;
子类继承于抽象类,就要实现父类中的抽象方法,否则只能把自己定义为抽象类
抽象类不能创建对象
抽象方法不能为static;
必须声明为抽象类的情况:
一个类中包含一个或多个抽象方法的时候
当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;
/
2、抽象类的规则
注意:
抽象类不能被实例化;
包含的抽象方法必须在其子类中被实现,否则子类只能声明为abstract;
抽象方法不能为static;
在下列情况下,一个类必须声明为抽象类:
当一个类的一个或多个方法是抽象方法时;
当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部
分;
当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;
1、 final关键字
类:用final修饰的类,不能够被继承
属性:用final修饰的属性,不能被修改
方法:用final修饰的方法,不能被覆盖
1、 接口
/*
*
-
接口: 语法规则:[访问权限修饰符] interface 接口名 { 接口的成员 }
-
- 在接口中没有具体实现的方法,都是抽象方法。*
-
接口中方法的定义
-
1.jdk8开始可以在接口中使用default关键字修饰方法,使方法可以拥有具体实现
-
2.用static关键字修饰方法,可以使用接口名直接调用方法
-
3.只有声明,没有具体实现(最常用)
*/
三、多态
多态:通过不同的子类对象,覆盖相同的父类方法,实现不同的效果 -
向上转型(上溯造型)
父类类名 对象名=new 子类类名()具有继承或实现关系 向上转换损失了子类新扩展的属性和方法,仅可以使用从父类中继承的属性和方法
向下转型(下溯造型)
子类类名 对象名=(子类类名) 父类对象
将父类对象显示的转换成子类类型。
曾经向上转换过的对象,才能再向下转换。对象不允许不经过上溯造型而直接下溯造型。多态存在的三个必要条件
要有继承,或实现
要有重写(覆盖)
父类引用指向子类对象
*/