多态、抽象类、接口

来源:互联网 发布:jq signature.js下载 编辑:程序博客网 时间:2024/05/21 11:14

一.多态—-体现java的灵活性

1. 多态的概念—-面向对象编程的精髓

  1. 所谓多态:多种形态。生物学,是指一个生物或物种可以有多重不同的形式和阶段。OOP中,多态是指一个对象有多重形式的能力。相同的行为,不同的实现

2.多态的分类

1.静态多态

“静”在编译时期系统就能知道调用哪个方法。
实现:重载和重写

2.动态多态(重点)

运行中系统才能动态确定方法所指的对象。通过对象的绑定关系来确定。

1. 重写
2.动态绑定

概念:运行时根据父类引用变量指向的实际类型对象执行相应的子类方法,从而实现多态性

1. 转型技术
  1. 怎么转
    • 向上转型技术,一个父类的引用变量可指向不同的子类对象,或者说一个子类对象可以被当做一个父类类型。
    • instanceof关键字用于判断运行时对象的真正类型。
  2. 谁能转
    只有有继承关系的,才可能做类型转换。
    父类 变量 = 子类对象,向上转型没有风险
    子类 变量 = (子类)父类对象 ,向下转型有风险。因为如果子类引用.子类中特有的方法,那么实际上的父类对象是没有这个方法的。
    父类的范围比子类的范围大。
    总结:要想编译通过且运行通过,只能靠本类引用指向本类对象,父类引用指向子类对象。子类引用不能指向父类的对象。
  3. 为什么能转
    计算机的内存分配。
  4. 推演静态绑定
    当我们得到一个父类的引用时,不知道实际上指向的是哪个对象。
  5. 运算符 instanceof
    用于判断某个对象是否是某个类型的实例。
  6. 动态绑定机制
    如果用父类引用指向子类对象,再用父类引用调用一个在子类中被重写的方法,那么调用的是子类的方法实现。因为JVM会在继承树上搜索,如果这个方法被子类重写了,那么调用子类的。
    但是父类引用不能调用子类中特有的方法和属性。

3.多态的使用场景

1.多态参数

当方法的某个参数是一个引用的时候,该引用兼容的任何对象都可以传递给方法,从而允许方法接收不同数据类型的参数。

2.异构集合

创建一个不是同一类型,但是有共同父类的数据集合。不同对象的集合称为异构集合。基本数据类型没有父类,所以无法放入Object[]中的。但是基本数据类型有对应的包装类。

二.抽象

1.抽象类

  1. 什么是抽象类
    有抽象方法的类就叫做抽象类。必须在类声明的前面加上可选修饰符abstract。
  2. 为什么要写抽象类
    生成子类。
  3. 抽象类到底在语法上有什么特点
    • 不能够实例化。因为对象是实际的存在,不应该有不确定的东西。
    • 虽然抽象类不一定有抽象方法,但是一般上不这样设计。
    • 继承了抽象方法的话,必须强制要求重写父类的抽象方法。除非这个子类也是一个抽象类。
    • 只能设计在类和方法上面。
  4. 和普通类有什么关系
    抽象类的内容和普通类是完全相同的。属性、构造、方法、初始化块。

2.抽象方法

当一个方法我们只能确定它的声明,无法确定它的实现,该方法就要设计为抽象方法。
语法:在方法的声明部分加上一个可选修饰符abstract,该方法不能有方法的实现部分,连{ }也不能有,用“;”直接结束。

public abstract void function();

2.接口

1.为什么要使用接口

让没有继承关系的类也可以共享行为,解决单继承丰富度不够的问题。
因为没有继承关系的类,也可能有相同的行为。仅凭类与类之间的is-a关系,不能描述所有的场景。

2.语法

  1. 定义一个接口 interface
    • 命名:XXXable,XXX是某种行为,able是能够,代表接口能够做某种行为的能力。
public interface Serviceable{   }
  • 接口在语法上访问修饰符只能是public或者默认。
  • 公共接口的名字必须和它所在的文件名保持一致。
    1. 实现接口
public class XXX implements XXX接口{}

必须实现接口中的所有方法,除非这个类是一个抽象类。
3. 继承接口 extends
接口继承接口是允许多继承的。接口相对于接口要复杂一些。

3.接口在设计上什么时候用

接口的引用指向实现了这个接口类的对象。但是只能看到实现类身上来自接口的东西。参与动态多态。

4.特点

  1. 是一种独立的数据类型。
  2. 关注行为的共享
  3. 一个类可以同时实现多个接口。在implements关键字后面书写多个关键字的名字,中间用逗号分隔。
  4. 类在实现接口的同时,可以做继承。
  5. 父类如果实现了接口,那么子类中也有接口中的方法。

5.组成

  • 公共静态常量,就算我们不写public、static、final、天生就是公共静态常量。
  • 没有构造器。
  • 接口里面的方法只能是公共抽象方法。就算不写public、abstract、默认也是抽象方法。高版本jdk中也可以有实现了的方法。但是要使用default关键字进行修饰。
  • 接口不能有初始化块。

抽象父类和接口选择:把与生俱来的行为写到抽象类中去,把可以附加的行为写到接口中去。
接口的设计原则:最小接口原则,尽量设计小接口,少设计大接口。因为最小接口原则可以自由组合。不会出现接口污染的问题(因为要实现接口中的一个功能,但是不得不实现接口中其他不需要的方法)。
这里写图片描述

0 0
原创粉丝点击