共计 2662 个字符,预计需要花费 7 分钟才能阅读完成。
大家好,本文将会给大家带来 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 多态
动态绑定 (动态联编): 在编译期实现,能够进步代码执行速度。动态绑定的办法包含:
- 静态方法
- 结构器
- private 办法
- 用关键字 super 调用的办法
动静绑定 (动静联编):指在“执行期间(而非编译期间)”判断所援用对象的理论类型,依据其理论的类型调用其相应的办法。这尽管让咱们编程灵便,然而升高了代码的执行速度。这也是 JAVA 比 C /C++ 速度慢的次要因素之一。
多态,polymorphism 即多种状态,含糊策略,以不变应万变,应用多态能够编写更加通用的代码。
多态的概念倒退进去,是以封装和继承为根底的。子类以父类的身份呈现,但做事件时还是以本人的办法实现。
雷同的事物,调用其雷同的办法,参数也雷同时,但体现的行为却不同。
要产生多态有三个必要条件:要有继承,要有重写,父类援用指向子类对象。
多态例子:
- 例 1(必须把握看透):
Animal Cat Dog
例 2 (进步了解多态):先思考再运行看后果
- 做题四大准则:
1、继承链,本人没有找父亲;
2、编译看类型 + 确定办法表,运行找对象
3、就近最优准则:本人没有找父亲
4、产生多态,基类对子类的新增办法不可见
4 抽象类
用 abstract 关键字来润饰一个类时,这个类叫做抽象类;用 abstract 来润饰一个办法时,该办法叫做形象办法。
含有形象办法的类必须被申明为抽象类,抽象类必须被继承,形象办法必须被重写
抽象类不能被实例化
形象办法只需申明而不须要实现
例:动物快乐了都会叫 但对于不同品种的动物,各自的叫声不同,动物(这个父类)的叫法 / 叫声永远不可能满足子类的需要。
5 接口
接口(interface)是形象办法和常量值的定义的汇合。
从实质上讲,接口是一种非凡的抽象类,这种抽象类中只蕴含常量和办法的定义,而没有变量和办法的实现
从语义上能够了解为,对于某一种动作、行为、性能的形象,咱们将其定义为接口,作为一种规范齐全的标准而已,不合适定义为类。例如:飞这个性能,飞机能够飞(具备飞这个性能),小鸟能飞(具备飞这个性能),昆虫也能飞,个别咱们不会定义一个类 Fly, 从语义上不通,所以这只是一种性能,一个标准,咱们能够将其定义为一种接口,供其余类来实现
接口的个性
- 多个无关的类能够实现同一个接口
- 一个类能够实现多个无关的接口
- 与继承关系相似,接口与实现类之间存在多态性
定义 Java 类的语法格局:
<modifier> class <name>[extends<superclass>] [implements<interface>[,<interface>]…]{…}
- 接口中申明属性默认为 public static final 的,也只能是 public static final 的;
- 接口中只能定义形象办法,而且这些办法默认为 public 的,也只能是 public 的
- 接口能够继承其余的接口,并增加新的属性和形象办法
- 接口不能实现另一个接口,但能够继承多个其它接口
- 接口举例:Sing 这种能力 Paint 这种能力。
练习:设计接口实现上面构造
6 面向对象三大个性的了解
在编写代码时,咱们谋求”高内聚 低耦合”, 达到重用与标准,则须要应用面向对象的三大个性来实现:
封装 :encapsulation 暗藏信息
继承 :inheritance 连续 + 扩大父类信息
多态 :polymorphism 含糊策略 以不变应万变
封装作用:
a) 实现业余的分工,工作中的分模块、分性能开发。
b) 暗藏信息和实现细节。使得对代码的批改更加平安和容易
继承作用 :实现代码的复用,连续 + 扩大父类信息
多态作用 :以不变应万变(如 USB 接口,只有你实现了我的规范,就能插上电脑)
留神:
java 三大个性虽说简略,但真正能了解其中的含意,没有个一年半载的学习,是了解不了的。