乐趣区

关于java:在上海乐字节学习的第三十天

Java 面向对象三大个性以及 Java 多态

大家好,我是乐字节的小乐,本文将会给大家带来 Java 多态。

以上就是本次学习的 6 大工作。咱们顺次来看。

1

Object 类

Object 类是所有 Java 类的根基类。

如果在类的申明中未应用 extends 关键字指明其基类,则默认基类为 Object 类。

class Person{}

等价于

class Person extends Object{}

1、对象的实例化过程

实例化一个类是从最顶级的超类开始实例化的, 是一层一层的包裹构造.“先父类后子类, 先动态后成员”。

⑴toString 办法

toString: 对象的字符串示意

Object 类中定义有 public String toString() 办法,其返回值是 String 类型,用来形容以后对象的无关信息。

在进行 String 与其余类型数据的连贯操作时(如:System.out.println(“hello”+ person)),将主动调用该对象类的 toString() 办法

能够依据须要在用户自定义类型中重写 toString() 办法。

⑵equals 办法

equals: 比拟相等,默认地址比拟 (”第一个盒子的比拟”),要比拟第二个盒子须要重写该办法

Object 类中定义有:public boolean equals(Object obj) 办法

提供定义对象是否”相等”的逻辑

Object 的 equals 办法定义为:x.equals(y) 当 x 和 y 是同一个对象的援用时返回 true, 否则返回 false

JDK 提供的一些类,如 String,Integer,Date 等,都曾经重写了 Object 的 equals 办法,调用这些类的 equals 办法,x.equals(y), 当 x 和 y 所援用的对象是同一类对象且属性内容相等时(并不一定是雷同对象),返回 true 否则返回 false.

能够依据须要在用户自定义类型中重写 equals 办法

练习:重写后面定义的“Person”类和”Student”类的 toString 及 equals 办法,并测试。

2

对象转型(casting)

一个基类的援用类型变量能够“指向”其子类的对象。

一个基类的援用不能够拜访其子类对象的新增成员(包含属性和办法)。

能够应用“援用变量 instanceof 类名”来判断该援用类型变量所“指向”的对象是否属于该类或该类的子类。

子类对象能够当作基类的对象来应用,称作向上转型 (upcasting),反之称为向下转型 (downcasting)

  • 例 1:

有 Animal 类(父类)、Cat 类 (子类)、Dog 类(子类)。

  • 测试:

父类援用 = 父类对象

子类援用 = 子类对象

父类援用 = 子类对象

父类援用调用父类继承而来的属性和办法。

父类援用调用子类特有属性和办法 (向下转型)。

子类对象 instanceof 父类。

强制类型转换后能调用子类特有成员(属性和办法)。

  • 例 2:

测试将父类形参用子类对象作为实参应用

1、重载

2、通过强制类型转换调用子类特有成员

3

多态

动态绑定 (动态联编): 在编译期实现,能够进步代码执行速度。动态绑定的办法包含:

  1. 静态方法
  2. 结构器
  3. private 办法
  4. 用关键字 super 调用的办法

动静绑定 (动静联编):指在“执行期间(而非编译期间)”判断所援用对象的理论类型,依据其理论的类型调用其相应的办法。这尽管让咱们编程灵便,然而升高了代码的执行速度。这也是 JAVA 比 C /C++ 速度慢的次要因素之一。

多态,polymorphism 即多种状态,含糊策略,以不变应万变,应用多态能够编写更加通用的代码。

多态的概念倒退进去,是以封装和继承为根底的。子类以父类的身份呈现,但做事件时还是以本人的办法实现。

雷同的事物,调用其雷同的办法,参数也雷同时,但体现的行为却不同。

要产生多态有三个必要条件:要有继承,要有重写,父类援用指向子类对象。

多态例子:

  • 例 1(必须把握看透):

Animal Cat Dog

例 2 (进步了解多态):先思考再运行看后果

  • 做题四大准则:

1、继承链,本人没有找父亲;

2、编译看类型 + 确定办法表,运行找对象

3、就近最优准则:本人没有找父亲

4、产生多态,基类对子类的新增办法不可见

4

抽象类

用 abstract 关键字来润饰一个类时,这个类叫做抽象类;用 abstract 来润饰一个办法时,该办法叫做形象办法。

含有形象办法的类必须被申明为抽象类,抽象类必须被继承,形象办法必须被重写

抽象类不能被实例化

形象办法只需申明而不须要实现

例:动物快乐了都会叫 但对于不同品种的动物,各自的叫声不同,动物(这个父类)的叫法 / 叫声永远不可能满足子类的需要。

5

接口

接口(interface)是形象办法和常量值的定义的汇合。

从实质上讲,接口是一种非凡的抽象类,这种抽象类中只蕴含常量和办法的定义,而没有变量和办法的实现

从语义上能够了解为,对于某一种动作、行为、性能的形象,咱们将其定义为接口,作为一种规范齐全的标准而已,不合适定义为类。例如:飞这个性能,飞机能够飞(具备飞这个性能),小鸟能飞(具备飞这个性能),昆虫也能飞,个别咱们不会定义一个类 Fly, 从语义上不通,所以这只是一种性能,一个标准,咱们能够将其定义为一种接口,供其余类来实现

接口的个性

  1. 多个无关的类能够实现同一个接口
  2. 一个类能够实现多个无关的接口
  3. 与继承关系相似,接口与实现类之间存在多态性

定义 Java 类的语法格局:

<modifier> class <name>[extends<superclass>] [implements<interface>[,<interface>]…]{…}

  1. 接口中申明属性默认为 public static final 的,也只能是 public static final 的;
  2. 接口中只能定义形象办法,而且这些办法默认为 public 的,也只能是 public 的
  3. 接口能够继承其余的接口,并增加新的属性和形象办法
  4. 接口不能实现另一个接口,但能够继承多个其它接口
  5. 接口举例:Sing 这种能力 Paint 这种能力。

练习:设计接口实现上面构造

6

面向对象三大个性的了解

在编写代码时,咱们谋求”高内聚 低耦合”, 达到重用与标准,则须要应用面向对象的三大个性来实现:

封装 :encapsulation 暗藏信息

继承 :inheritance 连续 + 扩大父类信息

多态 :polymorphism 含糊策略 以不变应万变

封装作用:

a) 实现业余的分工,工作中的分模块、分性能开发。

b) 暗藏信息和实现细节。使得对代码的批改更加平安和容易

继承作用 :实现代码的复用,连续 + 扩大父类信息

多态作用 :以不变应万变(如 USB 接口,只有你实现了我的规范,就能插上电脑)

留神:

java 三大个性虽说简略,但真正能了解其中的含意,没有个一年半载的学习,是了解不了的。

退出移动版