java面向对象浅析系列1——三个基本特征
众所周知,面向对象的三个基本特征是封装、继承和多态。
笔者所理解的封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在java中能使用private、protected、public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。
笔者认为继承是子对象可以继承父对象的属性和行为,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。这非常类似大自然中的物种遗传。
封装和继承一般比较容易理解,而多态则不容理解,很容易理解错或者混淆概念。下面主要谈一谈笔者对多态的理解。
谈到多态,就需要先提到一些词汇,诸如重载、过载、覆盖、重写等等。笔者不对这些词汇的含义进行分析,而且对多态中的内容,每个人都会有自己的理解,而且也都有各自的习惯叫法,正所谓仁者见仁,智者见智。因为笔者在工作和学习中主要是使用java,因此笔者更倾向于使用java中的固定用法,即overriding(覆盖)和overload(过载)。多态则是体现在overriding(覆盖)上,而overload(过载)则不属于面向对象中多态的范畴,因为overload(过载)概念在非面向对象中也存在。
overload(过载)是指可以编写相同名称但不同形式的函数,C语言中也有这种特性,而C语言是面向过程不是面向对象的。overload(过载)要求不同形式的同名函数必须有不相同的参数列表,不同的参数列表包括参数的类型不一致、参数个数不一致、不同类型的参数的顺序不一致。而如果参数列表相同仅仅是函数返回值类型不一致则是非法的,因为编译器可能无法判断应该使用哪个返回类型的函数。请看以下示例:
有以下两个函数原型:
int count();
double count();
程序中可以有以下几种方式调用:
1. int iCount = count();
2. double dCount = count();
3. count();
在上面的1和2的调用示例中,编译器似乎能够判断出应该调用的函数从而做出正确的选择,然而很显然,对于3的调用编译器就无能为力了,而3的写法是完全合法并且实际上也会经常用到。
overriding(覆盖)是笔者所认为的面向对象中的多态,因为overriding(覆盖)是与继承紧密联系,是面向对象所特有的。多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。也就是说子对象可以使用重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现,这就是overriding(覆盖)。这种特性非常类似大自然遗传中的变异,变异使得大自然变得丰富多彩,而多态使面向对象富有魔力。下面通过一个具体示例来体会一下多态的魔力。
有一个父类A:
public class A {
public void methodA() {
System.out.println("This is Parent of A.");
}
}
父类A有以下三个子类:
public class B1 {
public void methodA() {
System.out.println("This is Children of B1.");
}
}
public class B2 {
public void methodA() {
System.out.println("This is Children of B2.");
}
}
public class B3 {
}
上面的子类B!和B2都重写了父类A的方法methodA,而B3则没有。下面我们用实际的调用语句看一看。
1. A a1 = new A();
2. A a2 = new B1();
3. A a3 = new B2();
4. A a4 = new B3();
5. a1.methodA();
6. a2.methodA();
7. a3.methodA();
8. a4.methodA();
以上语句的运行结果会如下:
This is Parent of A.
This is Children of B1.
This is Children of B2.
This is Parent of A.
从上面的运行结果可以看到,第五行是指向父类对象实例的引用调用方法methodA,执行也是父类的方法;第六、七行虽然是用类A的对象引用调用方法methodA,但是由于对象引用是指向相应的子类对象的实例,程序正确执行了子类的方法,并没有产生歧义;第八行是指向子类对象B3的实例的引用调用方法methodA,而由于子类B3没有对方法methodA进行overriding(覆盖),也就是直接继承了父类的行为,所以执行结果与第五行一样。从这里我们能够轻易体会到多态的魔力。
分享到:
相关推荐
### 浅谈Java面向对象与引用 在Java学习过程中,对于面向对象的理解和引用机制的掌握是至关重要的。本文将围绕这两个概念进行深入探讨,并针对初学者常见的疑惑点进行解答。 #### Java面向对象基础 Java是一种...
【面向对象语言C++与Java的区别】 随着信息技术需求的不断变化,计算机语言经历了从机器语言、汇编语言到高级语言的演进,直至现代流行的面向对象语言。在面向对象编程领域,C++和Java是最典型且广泛使用的两种语言...
Java 语言是一种面向对象的语言,而不是面向过程的语言,这就要求学生要用面向对象的概念进行思考,要用面向对象的概念进行设计。然而,对于大多数的学生来说,这是一种新的体验,这是一种新的挑战。 其次,学生对 ...
Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于,它打破了编译时的束缚,使得代码具有更高的灵活性和可扩展性。在Java中,反射主要依赖于`...
浅析C语言和Java语言的异同 ...C语言是一种面向过程的语言,具有简洁、紧凑、方便、灵活的特点,而Java语言是一种面向对象的语言,具有平台无关性、简单、面向对象、分布式、解释执行、健壮、安全性等特点。
Java语言是一种广泛应用于各领域的编程语言,以其平台无关性、面向对象、安全性及多线程等特性备受青睐。在职业教育中,Java语言的教学面临诸多挑战,包括如何克服程序设计的抽象性和枯燥性,以及如何激发学生的学习...
- Hibernate:Hibernate是一个对象关系映射(ORM)框架,简化了数据库操作,使得开发者可以使用Java对象而不是SQL语句来操作数据库。 4 Java Web 应用部署 Java Web应用通常被打包为WAR(Web ARchive)或EAR...
- **代码**:通常以类的成员方法形式呈现,这是Java面向对象特性的体现。 - **数据**:可以作为方法中的局部变量或类的成员变量存在,服务于代码的执行。 - **虚拟CPU**:即Thread类的实例,用于封装线程的执行环境...
设计模式是软件工程中的一种重要思想,它源于20世纪90年代初的“Gang of Four”(GoF)的经典著作《设计模式:可复用面向对象软件的基础》。这个概念的出现,极大地提升了软件开发的效率和质量,使得程序员能够通过...
Java作为一门面向对象的高级编程语言,其对象的创建过程是理解Java内存管理机制的重要一环。本文详细解析了Java中对象创建的整个流程,涵盖了类信息存储、对象引用、对象实体的内存分配以及实例化过程中方法的调用。...
在本压缩包中的"基于Java的Web开发技术浅析 (1).pdf"可能就包含了关于WAR文件的详细解析,以及如何在Web容器中部署和运行WAR文件的方法。 总的来说,Java Web开发技术是一个庞大的领域,涵盖了从服务器端编程、...
Java中的异常处理机制基于面向对象的思想构建了一套完整的体系,主要包括以下几个方面: 1. **Throwable类**:这是所有可以通过`throw`抛出或`catch`捕获的错误的基础类。 - **Error类**:用于表示编译时错误和...
Java语言是当前阶段的主流语言之一,具有入门较为简单、兼容性好、多线程、面向对象等优势。Java语言的优势使其被广泛应用到各行各业中,包括桌面程序的开发、嵌入式的开发以及互联网模块的开发。 Java语言在...
Java 多态性是面向对象技术的三大特性之一,它通过继承中的覆盖(动态多态性)和方法的重载(静态多态性)实现的。在Java中,多态性指的是一个名词可以有多个语义。 多态性的实现 Java 的多态性可以通过两种方式...
Java 是一种流行的面向对象的编程语言,广泛应用于软件开发、Android 应用开发、Web 开发等领域。然而,在 Java 学习过程中,初学者容易出现一些“短板”,即一些被忽视或不了解的重要概念和技术。 在 Java 学习中...
以上内容就是关于JavaScript面向对象编程的浅析,通过理解JavaScript中的函数即对象、构造函数、prototype属性以及如何封装私有成员等概念,我们可以更好地利用JavaScript进行面向对象编程,编写出结构更清晰、可...
Java作为一种面向对象的语言,非常适合用来教授软件工程的基本概念和方法。在Java教学中,软件工程的应用可以从以下几个方面展开: 1. 强调Java基础知识教学:学习任何编程语言,基础语法都是关键。学生需要理解和...
在Java编程语言中,对象和对象引用的概念是理解面向对象编程的关键部分。本文将深入探讨这两个概念,并通过示例代码来展示它们之间的区别和应用场景。 首先,我们需要明确什么是Java对象和对象引用。在Java中,对象...
Java是一门面向对象的语言,计算机编程技术发展到一定程度后,简单的结构化思想已不能满足现实的需要。因此,面向对象作为一种全新的、能够对现实世界进行模拟的编程思想很快被广泛应用。编程者对现实世界进行理解、...