面向对象四大基本特征

抽象:
抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。抽象包括行为抽象和状态抽象两个方面。例如,定义一个Person类,如下:
classPerson{
String name;
int age;
}
人本来是很复杂的事物,有很多方面,但因为当前系统只需要了解人的姓名和年龄,所以上面定义的类中只包含姓名和年龄这两个属性,这就是一种抽像,使用抽象可以避免考虑一些与目标无关的细节。我对抽象的理解就是不要用显微镜去看一个事物的所有方面,这样涉及的内容就太多了,而是要善于划分问题的边界,当前系统需要什么,就只考虑什么。

封装:
封装从字面上来理解就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象。
封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位。一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。
例如,人要在黑板上画圆,这一共涉及三个对象:人、黑板、圆,画圆的方法要分配给哪个对象呢?由于画圆需要使用到圆心和半径,圆心和半径显然是圆的属性,如果将它们在类中定义成了私有的成员变量,那么,画圆的方法必须分配给圆,它才能访问到圆心和半径这两个属性,人以后只是调用圆的画圆方法、表示给圆发给消息而已,画圆这个方法不应该分配在人这个对象上,这就是面向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。一个更便于理解的例子就是,司机将火车刹住了,刹车的动作是分配给司机,还是分配给火车,显然,应该分配给火车,因为司机自身是不可能有那么大的力气将一个火车给停下来的,只有火车自己才能完成这一动作,火车需要调用内部的离合器和刹车片等多个器件协作才能完成刹车这个动作,司机刹车的过程只是给火车发了一个消息,通知火车要执行刹车动作而已。
使用封装有四大好处:
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员进行更精确的控制。
4、隐藏信息,实现细节。

继承:
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

多态:
多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。
### 面向对象编程的四大基本特性 #### 封装 (Encapsulation) 封装是指将数据(属性)和操作数据的方法捆绑在一起,形成一个独立的单元——类。通过访问修饰符控制外部对类成员的访问权限,从而保护内部状态不被随意修改。这种方式不仅提高了安全性,还增强了模块化设计的能力[^1]。 ```java public class Person { private String name; // 私有字段 public void setName(String newName) { // 提供公共方法设置name this.name = newName; } public String getName() { // 获取name值 return this.name; } } ``` #### 继承 (Inheritance) 继承允许创建一个新的类,该新类可以从现有的类派生而来,并获得原有类的功能以及可以添加新的功能或覆盖已有功能。这种机制有助于减少重复代码并促进软件组件之间的重用性[^2]。 ```java class Animal { protected void eat() { System.out.println("This animal is eating."); } } // Dog 类继承自Animal类 class Dog extends Animal { @Override protected void eat(){ System.out.println("The dog eats bones."); } public void bark(){ System.out.println("Dog barks"); } } ``` #### 多态 (Polymorphism) 多态意味着同一个接口可以根据所处上下文的不同而表现出多种形态。具体来说,在运行时能够根据实际的对象类型调用相应版本的方法。这一特点使得程序更加灵活通用[^4]。 ```java public interface Shape { double area(); } class Circle implements Shape{ final double PI=3.14; int radius; public Circle(int r){ this.radius=r; } @Override public double area(){ return PI*this.radius*this.radius; } } Shape s=new Circle(5); System.out.print(s.area()); // 输出圆面积78.5 ``` #### 抽象 (Abstraction) 抽象用于隐藏复杂的现实世界实体的具体细节,只保留最本质的部分作为模型表示出来。在 Java 中可以通过定义抽象类或者接口来实现这一点。它强调的是概念而不是具体的实现方式。 ```java abstract class Vehicle { abstract void startEngine(); // 定义了一个抽象方法startEngine() void stopEngine(){ // 这是一个非抽象方法 System.out.println("Stopping engine..."); } } class Car extends Vehicle { @Override void startEngine() { System.out.println("Car's engine started!"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值