JavaSE---多态

1.多态概述

多态:在继承层次结构中,父类中定义的行为被子类重写后表现出不同的效果,它使得同一个行为在父类及其子类中具有不同的语义,可以简单理解为:事物存在的多种形态。

比如说:动物(父类)有move()方法,至于怎么移动,就要看动物的子类了,猫可以跑,鸟可以飞,鱼可以游,他们都继承自动物这个类,并且重写了父类的move()方法。

前提

  1. 有继承关系
  2. 有方法重写
  3. 有父类引用指向子类对象
    Father f = new Son();
    注:如果把子类对象赋给父类引用(将子类对象当作父类对象看待),那么就只能调用父类中已有的方法。

好处

  • 提高了代码的维护性(继承保证)和扩展性(由多态保证)
  • 消除了类之间的耦合性(类之间的耦合是由于继承引起的)
  • 可以当作形式参数,接受任意子类对象。

弊端

  • 不能使用子类特有的属性和行为。

静态绑定和动态绑定
调用对象方法的执行过程:

  • 编译器获取所有可能被调用的候选方法
  • 编译器根据实参类型从候选方法中匹配出应该调用的方法
  • 静态绑定:编译器可以准确的知道,应该调用哪个方法。
  • 动态绑定。

多态中成员访问特点

  • 成员变量:编译时看左边(父类),运行时也看左边(父类)。
  • 成员方法:编译时看父类,运行时看子类(实际进栈方法是子类方法)。
  • 静态方法:编译时看父类,运行时看父类(静态和类相关,算不上重写)。

补充: 当作参数时用多态最好,因为可扩展性强。java依赖抽象类或者接口来实现多态。

关键字: instanceof,判断前边引用是否是后边的数据类型。

2.抽象类

为什么要有抽象类:
子类重写了父类的move()方法,实际上这个方法在父类中是无意义的。所以可以在父类中只声明,而不作任何实现(就是没有方法体),留给子类按照自己的方式去实现。

开闭原则(open-closed principle,OCP):
满足开闭原则的软件实体应该具有的两个主要特征:对于扩展是开放的,对于修改是关闭的,意思就是:一个软件实体,应该通过扩展来实现变化,而不是通过修改代码来实现。

开闭原则实现方法:

  • 里氏代换原则(LSP)
  • 依赖倒转原则(DIP )
  • 接口隔离原则(LSP)

抽象类特点:

  • 抽象类和抽象方法用abstract修饰
  • 抽象类不一定有抽象方法,但有抽象方法的一定是抽象类,或者是接口。
  • 抽象类按照多态的方式,由具体的子类实例化。
  • 抽象类的子类:要么是抽象类,要么就要强制重写抽象类中的所有抽象方法。

抽象类的成员特点:

  • 成员变量:既可以是变量,也可以是常量,abstract不能修饰成员变量。
  • 构造方法:有,用于子类访问父类数据的初始化。
  • 成员方法:既可以是抽象的,也可以是非抽象的。

抽象类的成员方法特性:

  • 抽象方法:强制要求子类做事情。
  • 非抽象方法:子类继承,提高复用性。

注: abstract不能与static,fina,private共存。
总结: 当无法定义一个类的时候,就定义为抽象类,来解决父类方法的不解定性,抽象方法不能在类中实现,所以没有函数体,抽象类可以被继承,并且要将抽象类中的抽象方法全部实现。

3.接口(Interface)一种特殊的抽象类

概述: 接口是抽象方法和常量值的集合,主要从需求的角度描述类具有哪些功能,而并不给出每个功能的具体实现,即:定义了一个行为规范。

特点:

  • 用interface表示: interface 接口名{};
  • 类实现接口用implements表示。
  • 接口不能实例化,可以定义接口类型的引用变量,用于指向实现了该接口的类的实例(实现多态)。
  • 接口的子类:可以是抽象类,但意义不大,可以使具体类,但是要重写接口中的的所有方法。

接口的成员特点:

  • 接口中定义的变量都是常量(相当于final),因为默认给变量加上了public static final。
  • 接口中无构造方法。
  • 接口中不能定义非抽象方法。

注: 接口中所有的都是公共的,建议手动给出public

补充:

  1. 类与类:继承关系,可以单继承,也可以多层继承。
  2. 类与接口:实现关系,可以单实现,也可以多实现,并且还可以在继承一个类时,实现多个接口。
  3. 接口与接口:继承关系,可以单继承,也可以多继承。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象编程是一种编程范式,它将程序的构建和设计思路以面向对象的方式进行组织和实现。在Java中,面向对象编程是基于Java SE(Standard Edition)的一种编程方式。第07讲主要介绍了面向对象编程中的一些基本概念和关键术语。 在面向对象编程中,我们将程序中的数据和对数据的操作(方法)封装在一起,形成一个对象。对象由两部分构成:属性和方法。属性是用来描述对象的特征,而方法则是对象可以执行的操作。对象之间通过消息(方法调用)进行通信和交互。面向对象的核心思想是通过封装、继承和多态实现程序的复用和扩展。 封装是面向对象编程中的一个重要概念,它指的是将的属性和方法进行封装,使得外部无法直接访问和修改对象的内部状态,只能通过公共的方法来操作属性和执行方法。封装提供了一种将数据和行为组合在一起的方式,可以保护数据的完整性和安全性。 继承是面向对象编程中的另一个重要概念,它指的是通过定义一个新的来继承现有的属性和方法。通过继承,子可以继承父的属性和方法,并可以在此基础上进行扩展和修改。继承提供了一种代码复用的机制,可以减少重复编码的工作量。 多态是面向对象编程的又一个重要概念,它指的是同一型的对象在不同的情况下可以有不同的表现形式。多态通过方法的重写和方法的重载实现。方法的重写指的是在子中重新定义实现的方法,方法的重载指的是在同一个中可以定义多个同名但参数列表不同的方法。 总结来说,面向对象编程是一种将程序组织和设计思路以对象为中心的编程方式。在JavaSE中,我们可以通过封装、继承和多态实现面向对象编程的目标。封装可以提高程序的可维护性和可复用性,继承可以减少重复编码的工作量,多态可以灵活地操作对象。掌握这些基本概念和关键术语,可以帮助我们更好地理解和应用面向对象编程的思想。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值