`
flyingis
  • 浏览: 297645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

作者:Flyingis

    这几天我在重新复习
Java语言基础,虽然和团队一起,自己个人都进行了实际项目的开发,但越往上面走越觉得自己应该花点时间看看Java的基础知识,巩固一下基础。今天复习的是多态,同时写下自己的学习心得。

数据抽象、继承和多态是面向对象程序设计语言的三大特性。多态,我觉得它的作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。在某些很简单的情况下,或许我们不使用多态也能开发出满足我们需要的程序,但大多数情况,如果没有多态,就会觉得代码极其难以维护。

Java中,谈论多态就是在讨论方法调用的绑定,绑定就是将一个方法调用同一个方法主体关联起来。在C语言中,方法(C中称为函数)的绑定是由编译器来实现的,在英文中称为early binding(前期绑定),因此,大家自然就会想到相对应的late binding(后期绑定),这在Java中通常叫做run-time binding(运行时绑定),我个人觉得这样称呼更贴切,运行时绑定的目的就是在代码运行的时候能够判断对象的类型。通过一个简单的例子说明:

/**

 * 定义一个基类

 */

public Class Parents {

  public void print() {

    System.out.println(“parents”);

}

}

/**

 * 定义两个派生类

 */

public Class Father extends Parents {

  public void print() {

    System.out.println(“father”);

}

}

public Class Mother extends Parents {

  public void print() {

    System.out.println(“mother”);

}

}

/**

 * 测试输出结果的类

 */

public Class Test {

  public void find(Parents p) {

    p.print();

}

public static void main(String[] args) {

  Test t = new Test();

  Father f = new Father();

  Mother m = new Mother();

  t.find(f);

  t.find(m);

}

}

最后的输出结果分别是fathermother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定。

学过Java基础的人都能很容易理解上面的代码和多态的原理,但是仍有一些关键的地方需要注意的,算是自己对多态的一个小结:

1.        Java中除了staticfinal方法外,其他所有的方法都是运行时绑定的。在我另外一篇文章中说到private方法都被隐式指定为final的,因此final的方法不会在运行时绑定。当在派生类中重写基类中staticfinal、或private方法时,实质上是创建了一个新的方法。

2.        在派生类中,对于基类中的private方法,最好采用不同的名字。

3.        包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。

4.        对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对象,因为大家都知道Java垃圾回收器。

5.        在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对象初始化顺序。

6.        构造方法是被隐式声明为static方法。

7.        用继承表达行为间的差异,用字段表达状态上的变化。

分享到:
评论

相关推荐

    C++多态技术的实现和反思

    《C++多态技术的实现和反思》一文深入探讨了C++中多态特性的实现原理及其在实践中的应用与局限性。多态作为面向对象编程的核心特性之一,允许程序在运行时根据对象的实际类型调用相应的成员函数,从而提高了代码的...

    C# 学习心得(最新)

    13. **学习资源**:C#社区非常活跃,有很多优秀的学习资源,如MSDN文档、Stack Overflow问答、GitHub开源项目以及各种在线教程。 学习C#的过程不仅仅是掌握语法,更重要的是理解面向对象的设计思想,以及如何利用C#...

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    《Java入门1·2·3:一个老鸟的Java学习心得》是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。《Java入门1·2·3:一个老鸟的Java学习心得》充分考虑了初学Java...

    java学习心得体会

    Java学习心得体会 在编程的世界里,Java是一种广泛应用的高级编程语言,以其“一次编写,到处运行”的特性赢得了全球开发者的青睐。这篇心得体会旨在分享我在学习Java过程中的关键知识点,希望能为初学者提供一些...

    java实验报告(2)-多态和继承

    - **体会**:学生可能会分享在理解和应用多态和继承时的心得体会,比如如何通过这些概念理解面向对象编程的本质,以及在实际项目中如何有效地利用它们。 - **程序简介**:实验中创建的程序可能涉及到一个简单的类...

    php技术个人学习心得文档

    这份"php技术个人学习心得文档"是宝贵的资源,涵盖了PHP的基础知识,内置函数和方法,以及简单的PHP网页创建等内容。以下是基于这些信息的详细知识点讲解: 1. **PHP基础语法**: PHP语句通常以`开始,以`?>`结束...

    vc++学习心得编码规范

    在深入探讨VC++编程的学习心得和编码规范之前,我们首先要理解VC++是什么。VC++,全称Visual C++,是微软公司开发的一款集成开发环境,主要用于编写使用C++语言的应用程序。它集成了编译器、调试器以及各种工具,为...

    学习心得--C++学习经典

    14. **面向对象编程原则与设计模式**:学习并应用面向对象编程的原则(如封装、继承、多态)和设计模式(如工厂模式、单例模式),可以使代码结构更加清晰、易于扩展和维护。 15. **资源管理与优化**:了解并应用...

    VC学习4-我们学习VC的心得与体会

    通过这些学习心得,不仅可以系统地了解VC++,还可以看到作者在学习过程中遇到的问题及解决方案,这对自我学习和提升具有很大的启发性。对于那些想要提升自己在Windows环境下C++编程能力的人来说,这是一个非常有价值...

    c#学习心得,请看一看

    从给定的文件信息来看,标题和描述都指向了C#的学习心得,这是一门流行的编程语言,广泛应用于Windows应用程序开发、游戏开发(尤其是Unity引擎)、Web应用等场景。下面,我们将深入探讨C#的学习要点,包括其特性、...

    C#面向对象学习心得.txt

    从给定的文件信息来看,该文档主要围绕C#面向对象编程的学习心得展开,涵盖了类、继承、封装、多态等核心概念,并深入探讨了抽象类、接口、静态类、值类型与引用类型、命名空间等内容。下面将对这些知识点进行详细...

    Java学习心得分享

    ### Java学习心得分享 #### 一、引言 随着信息技术的快速发展,编程语言成为现代社会发展不可或缺的一部分。在众多编程语言中,Java凭借其强大的功能、跨平台的优势以及丰富的类库支持,成为了许多开发者首选的...

    C# 学习心得.rar

    这份名为"C#学习心得.rar"的压缩包,显然是一个学习者分享自己的学习历程和经验的集合。让我们深入探讨一下C#的核心知识点,以及在学习过程中可能遇到的挑战和解决方案。 C#的基础知识包括语法结构、变量、数据类型...

    Java web开发学习心得

    Java Web 开发学习心得 Java web 开发学习心得是指通过学习 Java web 开发课程获得的经验和体会。本文将从 Java web 开发的基本概念开始,逐步讲解 Java web 开发的知识点,并总结出学习 Java web 开发的要点和心得...

    java 枚举学习心得

    关于多态,枚举类型的实例在调用方法时,会遵循面向对象的多态原则。如果子类重写了父类的方法,那么在运行时会调用子类的方法,这就是为什么每个动物在调用`scream`时会输出各自的叫声。 枚举在实际开发中有很多...

    java学习心得

    从给定的文件信息中,我们可以提炼出一系列与Java学习及面向对象编程(Object-Oriented Programming,简称OOP)相关的关键知识点。以下是对这些知识点的详细解析: ### 面向对象编程概述 面向对象编程是一种被广泛...

    java学习心得.docx

    Java 学习心得 Java 是一种面向对象的编程语言,它的学习需要转变编程思想,从面向过程到面向对象。要学好 Java,必须知道类和对象的概念,类是对生活中事物的抽象描述,对象是对类的具体实例化。 Java 基础入门...

    学习心得(C#,SQL,javascript,etc...

    本文将结合标题“学习心得(C#,SQL,javascript,etc...)”和描述,深入探讨这三个领域的关键知识点,并分享工作中的实际应用和经验。 首先,我们来谈谈C#。C#是一种面向对象的编程语言,由微软开发,主要用于构建...

    java学习心得,笔记,思想

    这篇学习心得主要涵盖了Java的基础知识、进阶概念以及实战应用,同时提及了与Oracle数据库的交互和JDBC(Java Database Connectivity)的使用。 首先,Java的学习从基础开始,包括语法结构、数据类型、控制流程(如...

    s1java总结ava学习心得

    在深入探讨Java编程的学习心得之前,我们先要理解Java作为一种多平台、面向对象的编程语言,其重要性和广泛的应用场景。Java以其“一次编写,到处运行”的特性,被广泛应用于企业级应用开发、移动应用(Android)、...

Global site tag (gtag.js) - Google Analytics