初识Java,谈一谈面相对象编程的基本特性

简介: 面向对象编程(Object-Oriented Programming,简称 OOP),是Java这门编程语言最基本,也是最核心的思想,它是Java程序员必须熟练掌握的编程范式之一,深入理解并且灵活运用其基本特性,可以在实际开发过程中达到事半功倍的效果,也是Java开发者进阶路上的必经之路。

面向对象编程(Object-Oriented Programming,简称 OOP),是Java这门编程语言最基本,也是最核心的思想,它是Java程序员必须熟练掌握的编程范式之一,深入理解并且灵活运用其基本特性,可以在实际开发过程中达到事半功倍的效果,也是Java开发者进阶路上的必经之路。

一、什么是面向对象编程?
面向对象编程的核心思想是将现实世界中的事物抽象成代码中的类和对象,并通过抽象、封装、继承和多态等机制来模拟和描述现实世界中的概念和关系,从而更加直观、清晰地表达问题和解决方案,提高代码的可重用性、可扩展性和可维护性。
简单来说,“类”定义了对象的特征和行为,而“对象”则是类的具体实例化结果。
以一个常见的示例来解释:假设我们有一个"汽车"类(Car Class),定义了汽车的属性(如品牌、颜色、速度)和行为(如启动、加速、停止)。这个"汽车"类就是一个抽象的模板,描述了所有汽车共有的特征和能力,但并没有真正的汽车存在。然后,我们可以通过实例化来创建一个具体的汽车对象。例如,我们可以创建一个叫做"myCar"的汽车对象,根据"汽车"类的定义,我们可以给它设置属性(如品牌为"BMW",颜色为"红色",速度为0),并调用其方法(如启动方法,加速方法)。
在这个例子中,"Car"类就是一个抽象的概念,代表了所有汽车的属性和行为。而"myCar"对象则是"Car"类的一个具体化实例,拥有了具体的品牌、颜色、速度等属性,同时能够执行启动、加速等行为。
换句话说,类就像是制定了一套规则的模板,而对象则是按照这套模板创建出来的实际物体。
同时,值得注意的是,同一个类可以创建多个不同的对象。例如,我们可以创建多个汽车对象,每个对象有自己独立的属性和行为,但都遵循了“汽车”类的定义。
二、面向对象的基本特性:
1.封装性(Encapsulation)
封装是一种将数据和方法包装在类中的一种机制,以实现数据的隐藏和保护。通过封装,可以通过访问控制符(如 private、public、protected)控制对象的可见性,只能通过类提供给对外的方法进行操作,以此保证数据的安全性和一致性。
举例:创建一个银行账户类(BankAccount),它包含私有属性如账户余额(balance)和公开方法如存款(deposit)和取款(withdraw)。封装性使得账户余额只能通过提供的方法进行修改,例如:

public class BankAccount {
   
    private double balance;  // 私有属性

    public void deposit(double amount) {
   
        // 存款方法
        balance += amount;
    }

    public void withdraw(double amount) {
   
        // 取款方法
        if (balance >= amount) {
   
            balance -= amount;
        } else {
   
            System.out.println("余额不足");
        }
    }
}

通过封装,我们限制了直接访问账户余额的权限,只能通过调用deposit和withdraw方法来间接修改余额。这样可以确保账户余额在合理的范围内,并保护了数据的安全性。
2.继承性(Inheritance)
继承是一种通过已有类创建新类的机制,新类(称为子类或派生类)可以继承已有类(称为父类或基类)的属性和方法,并可以在此基础上添加新的特性,以此实现提高代码重用性,减少重复编写相似功能代码的目的。
举例:创建一个动物类(Animal),它有通用的属性和方法如名称(name)和移动(move)。然后我们可以创建一个子类如狗类(Dog),它继承了动物类的属性和方法,并可以添加自己特有的属性和方法。

public class Animal {
   
    protected String name;

    public Animal(String name) {
   
        this.name = name;
    }

    public void move() {
   
        System.out.println("动物在移动");
    }
}

public class Dog extends Animal {
   
    public Dog(String name) {
   
        super(name);  // 调用父类的构造方法
    }

    public void bark() {
   
        System.out.println("汪汪汪");
    }
}

在这个例子中,狗类继承了动物类的属性和方法,同时也添加了自己特有的方法bark。这样我们就可以创建一个狗对象,并调用继承自动物类的move方法和独有的bark方法。
3.多态性(Polymorphism)
多态是指同一类型的对象在不同情境下表现出不同的行为。通过多态,我们可以通过父类对象引用指向子类对象,并根据实际类型调用对应的方法,以此增强代码的灵活性和扩展性。
举例:创建一个动物类(Animal)和多个子类如狗类(Dog)和猫类(Cat)。假设有一个方法接收动物对象并调用移动方法:

public void moveAnimal(Animal animal) {
   
    animal.move();
}

// 然后我们可以创建不同类型的动物对象,并传递给moveAnimal方法:

Animal dog = new Dog("旺财");
Animal cat = new Cat("咪咪");

moveAnimal(dog);  // 调用狗类的move方法
moveAnimal(cat);  // 调用猫类的move方法

在这个例子中,虽然方法的参数类型为动物类,但传递的实际对象可以是狗类或猫类。这样在调用move方法时,会根据实际对象的类型来确定调用哪个子类的方法。这就是多态性的体现。
4.抽象性(Abstraction)
抽象性是指将对象中的共同特征抽取出来形成一个抽象类或接口,以提供一种模板或规范。抽象类提供了一些共同的属性和方法,具体实现由子类完成。接口则只定义了一组方法签名,而没有具体的实现细节。
举例:创建一个形状类(Shape),它有一个抽象方法计算面积(calculateArea)。然后我们可以创建具体的子类如圆类(Circle)和矩形类(Rectangle),它们必须实现计算面积的方法。

// 形状类
public abstract class Shape {
   
    // 计算面积的抽象方法
    public abstract double calculateArea();
}

// 圆类
public class Circle extends Shape {
   
    private double radius;

    public Circle(double radius) {
   
        this.radius = radius;
    }

    public double calculateArea() {
   
        return Math.PI * radius * radius;
    }
}

// 矩形类
public class Rectangle extends Shape {
   
    private double width;
    private double height;

    public Rectangle(double width, double height) {
   
        this.width = width;
        this.height = height;
    }

    public double calculateArea() {
   
        return width * height;
    }
}

在这个例子中,形状类定义了一个抽象方法calculateArea,让子类来具体实现。这样我们可以创建圆类和矩形类的对象,并调用它们自己的calculateArea方法,但无需关心具体实现细节。
对“面相对象编程”思想的深入理解和灵活运用,是贯穿Java程序员整个职业生涯的过程,只要在实际业务案例中善于分析和思考,就一定能加深加强对其基本特性的理解和运用。

相关文章
|
1天前
|
缓存 负载均衡 安全
|
4天前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
1天前
|
Java 开发者
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案。本文通过技术综述及示例代码,剖析两者在性能上的差异。if-else具有短路特性,但条件增多时JVM会优化提升性能;switch则利用跳转表机制,在处理大量固定选项时表现出色。通过实验对比可见,switch在重复case值处理上通常更快。尽管如此,选择时还需兼顾代码的可读性和维护性。理解这些细节有助于开发者编写出既高效又优雅的Java代码。
6 2
|
1天前
|
Java 开发者
在Java编程的广阔天地中,if-else与switch语句犹如两位老练的舵手,引领着代码的流向,决定着程序的走向。
在Java编程中,if-else与switch语句是条件判断的两大利器。本文通过丰富的示例,深入浅出地解析两者的特点与应用场景。if-else适用于逻辑复杂的判断,而switch则在处理固定选项或多分支选择时更为高效。从逻辑复杂度、可读性到性能考量,我们将帮助你掌握何时选用哪种语句,让你在编程时更加得心应手。无论面对何种挑战,都能找到最适合的解决方案。
5 1
|
1天前
|
搜索推荐 Java 程序员
在Java编程的旅程中,条件语句是每位开发者不可或缺的伙伴,它如同导航系统,引导着程序根据不同的情况做出响应。
在Java编程中,条件语句是引导程序根据不同情境作出响应的核心工具。本文通过四个案例深入浅出地介绍了如何巧妙运用if-else与switch语句。从基础的用户登录验证到利用switch处理枚举类型,再到条件语句的嵌套与组合,最后探讨了代码的优化与重构。每个案例都旨在帮助开发者提升编码效率与代码质量,无论是初学者还是资深程序员,都能从中获得灵感,让自己的Java代码更加优雅和专业。
5 1
|
1天前
|
Java
在Java编程的广阔天地中,条件语句是控制程序流程、实现逻辑判断的重要工具。
在Java编程中,if-else与switch作为核心条件语句,各具特色。if-else以其高度灵活性,适用于复杂逻辑判断,支持多种条件组合;而switch在多分支选择上表现优异,尤其适合处理枚举类型或固定选项集,通过内部跳转表提高执行效率。两者各有千秋:if-else擅长复杂逻辑,switch则在多分支选择中更胜一筹。理解它们的特点并在合适场景下使用,能够编写出更高效、易读的Java代码。
5 1
|
4天前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
3天前
|
自然语言处理 Java 应用服务中间件
Java 18 新特性解析
Java 18 新特性解析
|
3天前
|
设计模式 算法 Java
Java编程中的设计模式:简化复杂性的艺术
在Java的世界中,设计模式如同一位智慧的导师,指引着开发者们在复杂的编码迷宫中找到出口。本文将深入浅出地探讨几种常见的设计模式,通过实例演示如何在Java项目实践中运用这些模式,从而提升代码的可维护性和扩展性。无论你是新手还是资深开发者,这篇文章都将为你打开一扇通往高效编码的大门。
12 1
|
4天前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的