类的特征及抽象类内容
一、类的三大特征
1.类的封装 package
-
1.1封装:是面向对象编程的核心思想,封装的载体是类,且对象的行为和属性都分装在这个类中,类通常对客户隐藏细节。
z1.PNG
JD.png
2、类的继承 inherit(平板电脑继承于台式电脑)
继承的基本思想:基于某个父类的扩展,并制定一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原父类不具备的属性和方法,或直接重写父类中的某些属性个方法。(平行四边形是特殊的四边形,若说平行四边形继承了四边形类,那么平行四边形类就保留在四边形类所有属性和方法的同时,还扩展了平行四边形类特有的属性和方法)
-
2.1 extends关键字:在Java中,让一个类继承另一个类需要使用extends关键字。
z1.PNG - 注意:Java中只支持单继承,即一个类只可以有一个父类。
-
2.2 方法的重写:当父类的某个方法不适用于子类时,就需要子类中重写父类的这个方法。
--- 重写的实现:在子类中将父类的成员方法名称保留,重新编写父类成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法返回值类型。(重构:当子类和父类的成员方法返回值、方法名称、参数类型、个数完全相同,唯一不同的是方法实现内容)
--- 注意:重写父类方法时,修改方法的修饰权限只能从小范围到大范围改变,不能降低方法的修饰权限范围,如,父类中的dosomething()方法的修饰权限为protected,继承后子类中的方法dosomething()的修饰权限为public,不能修饰为private,否则重写关系就是错误的。(public>protected>private)
--- super关键字:在子类的方法中实现父类原有方法
z1.PNG - 2.3 所有类的父类——Object类:在Object类中主要包括clone()、finalize()、equals()、toString()等方法。由于所有类都是Object类的子类,所以任何类都可以重写Object类中的方法。
-
注意:Object类中的getClass()、notify()、notifyAll()、wait()等方法不能重写,因为这些方法被定义为final类型。
JD.png
————实例1:
-
Human为父类
JD.png -
Student为子类
z1.PNG -
测试程序
z2.PNG -
运行结果
z3.PNG
————实例2:
-
主程序
z1.PNG -
创建MyButton类,继承Button
z2.PNG -
使用这个按钮
z3.PNG -
运行效果
JD.png
3、类的多态 polymorphism
-
3.1 方法的重载:在同一个类中允许同时存在多个同名方法,只要这些方法的参数个数和类型不同即可。
JD.png - 3.2 向上转型:是从一个较具体的类到较抽象的类的转换,所以向上转型是安全的(例如,可以说平行四边形是特殊的四边形,但不能说四边形是平行四边形)
-
注意:执行向上转型操作时,父类的对象无法调用子类独有的属性或方法
JD.png
- 3.3 向下转型:将抽象类转换成具体的类。这样的转换通常会出现问题(例如,不能说四边形时平行四边形,也不可以说所有的鸽子都是鸟)
在做向下转型操作时,将抽象的对象(四边形)转换为具体的对象(平行四边形)肯定会出现问题,这时就要告知编译器这个四边形对象就是平行四边形对象。就有了,显式类型转换:将父类对象强制转换成某个子类对象 -
注意:使用显式类型转换向下转型时,必须向编译器指明将父类对象转换为哪一种类型的子类对象。
JD.png - 3.4 instanceof关键字:用来判断父类对象是否为子类的实例;判断某个类是否实现了某个接口。且使用instanceof关键字的表达式返回值是布尔值。
-
注意:instanceof是Java语言的关键字,在Java语言中的关键字都为小写。
JD.png
4.类之间的关系
纵向关系:比较清晰
-
继承:父子关系——extends
实现:类对接口的实现——implements
横向关系:取决于语义 -
依赖
双方的地位往往是独立平等的(地位)
是偶尔的、临时性的、不频繁的(依赖程度)
代码层面的表现形式而言,往往是局部的变量
类B以参数的形式传入类A的方法
类B以局部变量的形式存在于类A的方法中
类A调用类B的静态方法
——————(员工和游轮) -
关联
双方的地位往往是独立的、平等的(地位)
是长期的、稳定的、频繁的(依赖程度)
代码层面的表现形式而言,关联往往以全局属性的形式存在
————(员工和手机) -
聚合
双方的地位不是平等的,是整体和部分之间的关系(地位)
是长期的、稳定的、频繁的,这种关系比关联更强,以至于在形式上出现了整体和部分之间的关系。整体和部分都有自己的生命周期,一方的消失另外一方不会跟着消失。(依赖程度)
代码层面的表现形式而言可参考关联
————(公司和员工) -
组合
双方的地位不是平等的,是整体和部分之间的关系(地位)
比聚合更强,部分的生命周期取决于整体,部分随着整体的消失而消失(依赖程度)
代码层面的表现形式而言可参考关联
区分是聚合还是组合的核心点是在生命周期
————(公司和部门)
二、抽象类与接口
1、抽象类与抽象方法
- 1.1 抽象类——使用abstract关键字定义的类;抽象方法——使用abstract关键字定义的方法.。
抽象类不能产生对象实例。定义抽象类时,使用abstract关键字 -
注意:构造方法不能定义成抽象方法
JD.png
2、接口的声明及实现
-
接口的所有方法都没有方法体
JD.png
3、多重继承
-
在Java中类不允许多重继承,但使用接口可以实现多重继承。因为一个类可以同时使用多个接口,这样就可以将所有需要实现的接口放在implements关键字后,并使用英文逗号“,”隔开。
JD.png
4、接口与抽象类的对比
-
抽象类与接口的区分:
1.PNG -
5个不同点:
2.PNG - 注意:a、抽象类中可以有抽象方法但要有方法体 { }
b、抽象方法指做方法声明
参考文章:点这里