作者: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);
}
}
最后的输出结果分别是father和mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定。
学过Java基础的人都能很容易理解上面的代码和多态的原理,但是仍有一些关键的地方需要注意的,算是自己对多态的一个小结:
1. Java中除了static和final方法外,其他所有的方法都是运行时绑定的。在我另外一篇文章中说到private方法都被隐式指定为final的,因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。
2. 在派生类中,对于基类中的private方法,最好采用不同的名字。
3. 包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。
4. 对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对象,因为大家都知道Java垃圾回收器。
5. 在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对象初始化顺序。
6. 构造方法是被隐式声明为static方法。
7. 用继承表达行为间的差异,用字段表达状态上的变化。
分享到:
相关推荐
《C++多态技术的实现和反思》一文深入探讨了C++中多态特性的实现原理及其在实践中的应用与局限性。多态作为面向对象编程的核心特性之一,允许程序在运行时根据对象的实际类型调用相应的成员函数,从而提高了代码的...
13. **学习资源**:C#社区非常活跃,有很多优秀的学习资源,如MSDN文档、Stack Overflow问答、GitHub开源项目以及各种在线教程。 学习C#的过程不仅仅是掌握语法,更重要的是理解面向对象的设计思想,以及如何利用C#...
Java学习心得体会 在编程的世界里,Java是一种广泛应用的高级编程语言,以其“一次编写,到处运行”的特性赢得了全球开发者的青睐。这篇心得体会旨在分享我在学习Java过程中的关键知识点,希望能为初学者提供一些...
- **体会**:学生可能会分享在理解和应用多态和继承时的心得体会,比如如何通过这些概念理解面向对象编程的本质,以及在实际项目中如何有效地利用它们。 - **程序简介**:实验中创建的程序可能涉及到一个简单的类...
这份"php技术个人学习心得文档"是宝贵的资源,涵盖了PHP的基础知识,内置函数和方法,以及简单的PHP网页创建等内容。以下是基于这些信息的详细知识点讲解: 1. **PHP基础语法**: PHP语句通常以`开始,以`?>`结束...
在深入探讨VC++编程的学习心得和编码规范之前,我们首先要理解VC++是什么。VC++,全称Visual C++,是微软公司开发的一款集成开发环境,主要用于编写使用C++语言的应用程序。它集成了编译器、调试器以及各种工具,为...
14. **面向对象编程原则与设计模式**:学习并应用面向对象编程的原则(如封装、继承、多态)和设计模式(如工厂模式、单例模式),可以使代码结构更加清晰、易于扩展和维护。 15. **资源管理与优化**:了解并应用...
通过这些学习心得,不仅可以系统地了解VC++,还可以看到作者在学习过程中遇到的问题及解决方案,这对自我学习和提升具有很大的启发性。对于那些想要提升自己在Windows环境下C++编程能力的人来说,这是一个非常有价值...
从给定的文件信息来看,标题和描述都指向了C#的学习心得,这是一门流行的编程语言,广泛应用于Windows应用程序开发、游戏开发(尤其是Unity引擎)、Web应用等场景。下面,我们将深入探讨C#的学习要点,包括其特性、...
从给定的文件信息来看,该文档主要围绕C#面向对象编程的学习心得展开,涵盖了类、继承、封装、多态等核心概念,并深入探讨了抽象类、接口、静态类、值类型与引用类型、命名空间等内容。下面将对这些知识点进行详细...
### Java学习心得分享 #### 一、引言 随着信息技术的快速发展,编程语言成为现代社会发展不可或缺的一部分。在众多编程语言中,Java凭借其强大的功能、跨平台的优势以及丰富的类库支持,成为了许多开发者首选的...
这份名为"C#学习心得.rar"的压缩包,显然是一个学习者分享自己的学习历程和经验的集合。让我们深入探讨一下C#的核心知识点,以及在学习过程中可能遇到的挑战和解决方案。 C#的基础知识包括语法结构、变量、数据类型...
Java Web 开发学习心得 Java web 开发学习心得是指通过学习 Java web 开发课程获得的经验和体会。本文将从 Java web 开发的基本概念开始,逐步讲解 Java web 开发的知识点,并总结出学习 Java web 开发的要点和心得...
关于多态,枚举类型的实例在调用方法时,会遵循面向对象的多态原则。如果子类重写了父类的方法,那么在运行时会调用子类的方法,这就是为什么每个动物在调用`scream`时会输出各自的叫声。 枚举在实际开发中有很多...
从给定的文件信息中,我们可以提炼出一系列与Java学习及面向对象编程(Object-Oriented Programming,简称OOP)相关的关键知识点。以下是对这些知识点的详细解析: ### 面向对象编程概述 面向对象编程是一种被广泛...
Java 学习心得 Java 是一种面向对象的编程语言,它的学习需要转变编程思想,从面向过程到面向对象。要学好 Java,必须知道类和对象的概念,类是对生活中事物的抽象描述,对象是对类的具体实例化。 Java 基础入门...
本文将结合标题“学习心得(C#,SQL,javascript,etc...)”和描述,深入探讨这三个领域的关键知识点,并分享工作中的实际应用和经验。 首先,我们来谈谈C#。C#是一种面向对象的编程语言,由微软开发,主要用于构建...
这篇学习心得主要涵盖了Java的基础知识、进阶概念以及实战应用,同时提及了与Oracle数据库的交互和JDBC(Java Database Connectivity)的使用。 首先,Java的学习从基础开始,包括语法结构、数据类型、控制流程(如...
在深入探讨Java编程的学习心得之前,我们先要理解Java作为一种多平台、面向对象的编程语言,其重要性和广泛的应用场景。Java以其“一次编写,到处运行”的特性,被广泛应用于企业级应用开发、移动应用(Android)、...
### C++ 学习心得与初学者指南 #### 前言 在计算机科学领域,C++ 是一门非常重要的编程语言。它不仅被广泛应用于系统软件、游戏开发、高性能计算等多个方面,也是许多大型企业(如微软、谷歌等)的核心技术之一。...