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 多态

静态绑定(静态联编): 在编译期完成,可以提高代码执行速度。静态绑定的方法包括:

静态方法

构造器

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三大特性虽说简单,但真正能理解其中的含义,没有个一年半载的学习,是理解不了的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java面向对象程序设计:抽象类,接口用法实例分析

    本文实例讲述了Java面向对象程序设计:抽象类,接口用法.分享给大家供大家参考,具体如下: 本文内容: 抽象类 接口 抽象类与接口的异同 首发日期:2018-03-24 抽象类: 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义"叫"的属性的,显然应该由子类来决定怎么"叫",但"叫"这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容

  • Java面向对象程序设计:继承,多态用法实例分析

    本文实例讲述了Java面向对象程序设计:继承,多态用法.分享给大家供大家参考,具体如下: 本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类(父类/超类/基类)即可.[比如,泰迪狗类也是狗类,狗的属性,泰迪狗也应该是有的,那么泰迪狗类在定义的时候就不必要添加那些与狗类重复的属性了,而是直接继承狗类即可.在多个狗类的子类(泰迪狗,二哈,柴犬)的时候,直

  • Java面向对象程序设计多态性示例

    本文实例讲述了Java面向对象程序设计多态性.分享给大家供大家参考,具体如下: 多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1. 子类到父类的转换: 例: Dog dog=new Dog("欧欧","雪纳瑞"); dog.eat(); Pet pet=new Dog("欧欧","雪纳瑞");//子类到父类的转换 pet.eat(

  • Java面向对象基础之多态性,抽象类和接口

    一.多态性 多态是指一个对象可以拥有多种不同的形态,继承是实现多态的基础. 1.1 引用多态和方法多态 引用多态:父类引用可以指向本类的对象,也可以指向子类的对象 方法多态: 1.创建本类对象时,调用的方法为本类方法: 2.创建子类对象时,调用的方法为子类重写或继承的方法. 首先建立父类Animal,包含一个eat()方法,如下代码所示: public class Animal { public void eat(){ System.out.println("动物可以吃东西"); }

  • java实现学生管理系统(面向对象)

    本文实例为大家分享了java实现学生管理系统的具体代码,供大家参考,具体内容如下 import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; /** * 学生管理系统 * 1.添加学生(不可以重复添加,学生的学号决定是否为同一个学生,学生按照学号进行排序) * 2.可以查看学生信息(包括,学号,姓名,性别,联系电话,年龄) * a.查看所有学生信息 * b

  • 详解java中面向对象设计模式类与类的关系

    前言 在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖.关联.聚合.组合.继承.实现.他们的耦合度依次增强. 1. 依赖(Dependence) 依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系.定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数.方法中的局部变量.或者静态方法调用.类上面的图例中:People类依赖于Bo

  • Java面向对象之继承性的实例代码详解

    一.类的继承 A类继承B类,是指A类可以拥有B类的非私有属性和方法,同时A类也可以自己定义属性方法或重写方法以扩充自己的功能. 1.1 方法的重写 重写方法时,方法的方法名.返回值类型和参数个数及类型均需一致. 首先定义父类Animal,包含年龄.名字两个属性及吃的方法. public class Animal { int age; String name; public void eat(){ System.out.println("动物可以吃东西"); } } 通过子类Dog继承父

  • java面向对象之学生信息管理系统

    通过学习的一系列知识点综合的小案例,通过控制台来完成一系列的增删查改的操作. 准备工作 开发工具IDEA2019.1.4,jdk13 思路 一共三个类,一个接口 Student类:封装数据 StudentManager类:用于管理增删查改等方法体 StudentView类:用于主界面的视图 StudentInterface接口:用于编写抽象方法体,用于继承 存放学生数据用我们学过的ArrayList,由于类是一种引用数据类型,所以我们可以将泛型指代成Student 编写逻辑 业务层调用逻辑层,逻

  • Java面向对象三大特性及多态解析

    大家好,本文将会给大家带来Java多态. 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. class Person{ } 等价于 class Person extends Object{ } 1.对象的实例化过程 实例化一个类是从最顶级的超类开始实例化的, 是一层一层的包裹结构. "先父类后子类,先静态后成员". ⑴toString方法 toSt

  • Java面向对象的封装特征深度解析

    目录 面向对象三大特征 封装 private关键字--实现类封装 访问器方法和更改器方法 包--类的集合 导入包 从人的角度理解包 不加访问权限--实现包封装 总结 在上一篇文章中,我们了解了面向对象的基础内容,这一篇将会更加深入地了解面向对象的特征. 面向对象三大特征 面向对象语言有三大特征: 封装 继承 多态 封装 对一个类实现封装,意味着限制其它类对该类数据的访问. 简单来讲,封装就是隐藏数据,就是保护对象的数据.对象,听起来总是那么地抽象,为了更好地理解封装,我将对象具体指向人,从人的角

  • php学习笔记 php中面向对象三大特性之一[封装性]的应用

    复制代码 代码如下: <?php /* * 封装性:面向对象三大特性之一 * * 1.就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节 * 访问权限修饰符 public protected private * private:私有的,用这个关键字修饰的成员,只能在对象内部访问(只有用$this访问) * * 属性可以封装: * 只要一个变量,需要在多个方法使用,就将这个变量声明为成员属性,可以直接在这个对象中的所有方法中使用 * * 成员属性,相当于这个对象中的

  • javascript面向对象三大特征之多态实例详解

    本文实例讲述了javascript面向对象三大特征之多态.分享给大家供大家参考,具体如下: 多态 从某种意义上来说,多态是面向对象中重要的一部分,也是实施继承的主要目的. 一个实例可以拥有多个类型,它既可以是这种类型,也可以是那种类型,这种多种状态被称为类的多态. 多态的表现形式很多,其中继承和重载都是多态的表现形式. --整理自<jQuery开发从入门到精通> 继承 继承本身是多态的一种实现.详情请参考前面一篇:https://www.jb51.net/article/166097.htm

  • JAVA面向对象 封装原理及实例解析

    这篇文章主要介绍了JAVA面向对象 封装原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 抽象 去定义一个类的时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模板).这种研究问题的方法称为抽象. 修饰符 Java提供四种访问控制修饰符号控制方法和变量的访问权限: Ⅰ.公开级别:用pubilc修饰,对外公开 Ⅱ.受保护级别:用protected修饰,对子类和同一个包中的类公开 Ⅲ.默认级别:没有修饰符号,向同一

  • JAVA面向对象之继承 super入门解析

    目录 1 继承 1.1概念 1.2 特点 1.3 练习:继承入门案例 2 super 3 继承的用法 3.1 练习:super之继承中成员变量使用 3.2 练习:super之继承中构造方法的使用 4 方法重写Override 4.1 练习:继承中成员方法的使用 5 拓展 5.1 继承的好处与坏处 5.2 this与super的区别 5.3 重载Overload与重写Override的区别 1 继承 1.1概念 继承是面向对象最显著的一个特征 继承是从已有的类中派生出新的类,新类能吸收已有类的数据

  • 关于Java三大特性之多态的总结

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 1.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 2.实现多态的技术称为:动态绑定(dynamicbinding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 3.作用:消除类型之间的耦合关系. 4.现实中,关于多态的例子不胜枚举.比方说按下F1

  • 面向对象三大特性的意义讲解

    面向对象的三大特性:封装.继承和多态.这是任何一本面向对象设计的书里都会介绍的,但鲜有讲清楚的,新手看了之后除了记住几个概念外,并没真正了解他们的意义.前几天在youtube上看了Bob大叔讲解的SOLID原则,其中有一段提到面向对象的三大特性,收获很多,但是我并不完全赞同他的观点,这里谈谈我的想法: 封装 『封装』第一层含义是信息隐藏.这是教科书里都会讲解的,把类或模块的实现细节隐藏起来,对外只提供最小的接口,也就是所谓的『最小知识原则』.有个共识,正常的程序员能理解的代码在一万行左右.这是指

  • C# 面向对象三大特性:封装、继承、多态

    面向对象有封装.继承.多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成任务.这种编程方法提供了非常强大的多样性,大大增加了代码的重用机会,增加了程序开发的速度,将具备独立性特制的程序代码包装起来,修改部分程序代码时不至于会影响到程序的其他部分. 1.封装 每个对象都包含它进行操作所需要的所有信息,封装只公开代码单元的对外接口,而隐藏其具体实现,尽量不对外公开代码.使用封装有很多好处,从设计角度来讲,封装可以对外屏蔽一些

  • 详细理解JAVA面向对象的封装,继承,多态,抽象

    目录 类和对象的使用(面向对象思想落地的实现): 子类对象实例化的全过程 1.从结果上看:(继承性) 2.从过程上来看: 1.封装性 2.继承性 继承性的好处: 3.多态性 虚拟方法调用 4.抽象性 1.抽象类的特点: 2.天生的父类:抽象类 3.抽象方法 总结 创建类的对象 = 类的实例化 = 实例化类 类和对象的使用(面向对象思想落地的实现): 1.创建类,设计类的成员 2.创建类的对象 3.通过"对象.属性"或"对象.方法"调用对象的结构 如果创建了一个类的多

随机推荐