面向对象编程(以Java语言为例)

本文探讨了面向对象编程中的核心概念,如对象、状态行为、类、对象唯一性、封装性、抽象性、继承性和多态性。通过实例和Java/C#代码展示,阐述了如何运用这些原理来设计和实现软件。同时区分了值类型和引用类型,并以String为例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

1)对象。

对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

2)对象的状态和行为。

对象具有状态,一个对象用数据值来描述它的状态。

对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。

对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

3)类。

具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。

类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

二、特性

1)对象唯一性

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

2)封装性(信息隐藏)

封装性是保证软件部件具有优良的模块性的基础。

面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。

3)抽象性

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

4)继承性

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。

在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。

采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

5)多态性(多形性)

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

  • 例子

概念:

1)对象

ArrayList<IPerson> signInBook = new ArrayList<IPerson>();

这行代码表示使用类ArrayList实例化名称为signInBooks的ArrayList的一个对象

2)对象的状态和行为

 

上面例子中ArrayList就是类

特性:

1)对象唯一性

 

Java、C#中所有类的基类(父类)都是Object,所以所有类的对象都会有hashCode,在重写hashCode生成方式的前提下,hashCode就是对象的唯一标识。

  1. 封装性

 

类的封装性就是“将某些不希望类外部获悉具体实现的变量(状态)或方法(行为)通过关键字private封装在类内部,使其只能在类的内部进行操作”这样一种特性。上面的代码中的变量fakeName和方法CreateFakeName()由于其标识为private只能在Woman类内部使用,这就是类的封装性。

  1. 抽象性

 

 

 

上面代码中的三个类:男,女和伪娘表示的三个东西(姑且称它们为东西)有着很多相同的状态和行为,如这三个东西都包含有姓名,年龄,身高,性别等。将这些相同的状态和行为进行二次拼装后我们给定了这样一个概念:人,人就是男,女,伪娘的抽象。我们可以说男是人,女是人,伪娘是人。

 

可以被抽象的不仅有自然界实际存在的物体,像过程,方法,概念都可以被抽象,只要这个抽象能有一个或多个具现。

Q:抽象在编程中的好处有哪些?

A:抽象的好处1,少写好多代码。不同的具现我们可以用使用相同的抽象来代替。这样我们代码逻辑中只需要考虑处理抽象即可。

 

上面的代码我们只需对Person进行处理,不需要考虑是男是女还是伪娘,简化了代码的复杂度。

  1. 继承性

 

A:抽象的好处2,少写好多代码。抽象类中写过的方法可以不用做任何处理在具现的类中使用。如果没有抽象,我们需要在每个具现的类中实现这样的方法才能进行调用。

5)多态性(多形性)

 

 

上述代码中同样是人在报名字和三围,每个人的反应都不太一样。这就是多态性的功劳。具现如果对抽象中的某些状态(变量)或行为(方法)进行了重写(覆盖),那即使是使用抽象来调用这些状态或行为,表现出的逻辑也是具现中的逻辑。简单的说就是只要被重写了,抽象中的逻辑就不作数了。

 

 

 

 

因为男,女,伪娘都重写了姓名和三围两个方法,所以运行时表不一样也就说得通了。

四、值类型和引用类型

Java、C#中存在两中类型,值类型和引用类型。这两种类型在具体使用时表现是有一定的区别的,尤其是在使用如=,==这些操作符的时候需要特别注意。值类型有整型,浮点型,字符型,逻辑型,C#中结构体和枚举也是。其他类型如类,接口,枚举(单Java中)等为引用类型。

 

结果:

特殊的引用类型:String

 

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值