前言:
本篇文章主要讲解面向对象的几大特性相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。
如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~
小威在此先感谢各位小伙伴儿了😁
以下正文开始
文章目录
- 面向对象的特性概述
- 面向对象---封装
- 面向对象---继承
- 面向对象---多态
- 面向对象---抽象
面向对象的特性概述
面向对象编程(Object-Oriented Programming,OOP)是一种以对象为基础,将数据与方法封装在一起的编程范式,其几大特性包括:继承,封装,多态,抽象。
面向对象—封装
封装(Encapsulation):对外部隐藏对象的实现细节,只暴露必要接口,从而提高代码的可维护性、可重用性和安全性。例如,类中的成员变量可以使用访问权限修饰符来限制它们的访问级别,使得其他对象无法直接操作这些变量,只能通过公共方法对其进行间接操作。
在封装的过程中,我们通常使用访问权限修饰符来控制类的成员变量和成员函数的访问级别。访问权限修饰符可以主要分为四种:
-
public:公共访问权限,任何类都可以访问。
-
protected:保护访问权限,只有继承自该类的子类和同一个包中的类可以访问。
-
default:如果一个类或者类的成员不使用任何访问控制符修饰,则它的默认访问级别是default,这个类或者累的成员只能被本包中的其他类访问。
-
private:私有访问权限,只有该类内部的成员函数可以访问。
通过合理的设置访问权限修饰符,我们开发人员可以将对象的状态信息隐藏在类的内部,只暴露必要的接口供外部程序调用。这样一来,即使外部程序攻击了某个类的接口,也无法访问并修改对象的内部状态,从而保证了对象的安全性。
面向对象—继承
继承(Inheritance):**允许新的类继承已有类的属性和方法,在不改变原有类的情况下,扩展和修改其功能,从而降低代码的复杂度、提高代码的可维护性和可复用性。**例如,一个子类可以继承父类的属性和方法,并可以根据需要添加自己的新属性和方法。
在继承中,子类可以继承父类的所有属性和方法,包括公共的成员变量、成员函数、非私有的嵌套类等。对于父类中的私有成员,虽然不能直接使用,但是它们依然会被继承下来,并对子类产生影响。
继承的主要作用是提高代码的可重用性和可维护性。通过继承,我们可以基于已有的类快速创建新的类,从而避免代码的重复和冗余。同时,继承还可以使代码更易于维护和修改。当我们需要对一组类进行修改时,如果这些类都继承自同一个基类,那么我们只需要修改基类的代码,就能够实现对所有子类的修改,从而提高了代码的可维护性。
除此之外,继承还可以实现多态的特性,即同一类型的对象可以有多种形态,即不同的对象可以对同一消息做出不同的响应。在继承中,子类可以重写父类的方法,从而实现多态。多态可以让代码更加灵活,使得我们可以根据需要选择不同的子类来处理相同的消息,而不需要改变方法的调用方式,从而提高了代码的灵活性。
面向对象—多态
多态(Polymorphism):同一类型的对象可以有多种形态,即不同的对象可以对同一消息做出不同的响应。多态可以提高代码的灵活性,使代码更易于扩展和修改。例如,一个父类可以定义一个虚函数,而子类可以重写这个虚函数以实现不同的行为。
多态的实现有两种方式:继承和接口。
在继承中,子类可以继承父类的方法,并重写这些方法以实现不同的行为。当我们调用一个父类的对象时,如果该对象是子类的实例,那么就会根据子类的实现来执行该方法,从而实现多态。
在接口中,父类定义了一组抽象方法,而子类需要实现这些方法以提供不同的行为。当我们将子类的对象转换成父类的对象时,这个对象就可以使用父类的接口来调用不同的实现代码,从而实现多态。
多态的主要作用是允许我们编写出更加灵活和可扩展的代码。通过多态,我们可以编写出通用的代码,而不需要专门处理每一个子类。同时,多态还可以让代码更容易拓展和维护。当我们需要添加新的子类时,只需要实现父类定义的接口或者继承父类的方法,而不需要修改原有的代码,从而提高了代码的可扩展性和可维护性。
面向对象—抽象
抽象(Abstraction):将具有共性的实体抽象成类,从而减少代码的重复性,同时也使代码更易于理解和维护。例如,抽象类可以定义一些纯虚函数来声明接口,子类必须实现这些接口以达到抽象类的要求。
在抽象中,我们关注的是事物的本质,而不是具体的实现。因此,抽象可以帮助我们思考问题的高层次结构和关系,促使我们设计更好的软件系统。通过将系统中的复杂性隐藏在抽象接口中,我们可以将程序员的思考焦点放在高层次上,从而减少代码的细节和复杂度,提高软件的可维护性和可扩展性。
在面向对象编程中,抽象通常通过抽象类和接口来实现。抽象类是一种不能被实例化的类,其中包含了至少一个纯虚函数,在具体子类中必须实现该函数才能创建实例。接口是一种纯粹的抽象基础结构,只定义了一个或多个函数原型,没有任何成员变量。接口与抽象类类似,但是接口中的所有方法都是纯虚函数,没有具体实现。
抽象类和接口可以让我们定义一个约束,限制子类的存储或行为方式。这种约束可以保证子类在实现的过程中遵循系统设计需要的规范,从而提高软件质量。
文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。