0

0

用 Java 破解 OOP:一个你想要的 PIE

碧海醫心

碧海醫心

发布时间:2024-10-27 12:18:16

|

1149人浏览过

|

来源于dev.to

转载

用 java 破解 oop:一个你想要的 pie

在这篇文章中,我们将探讨 java 中面向对象编程 (oop) 的四个基本支柱。这些核心原则有助于构建模块化、可重用和可维护的代码。这篇文章作为介绍,即将推出的条目将通过细致入微的讨论和示例深入探讨每个概念。

为了便于记忆,请使用缩写词“a pie”a抽象,p多态,i继承,以及e封装。


面向对象意味着什么?

java 通常被描述为面向对象的语言,但它并不是 100% 面向对象的。 为什么?虽然 java 中的大多数元素都围绕对象(如类、对象和方法),但它也使用 原始类型(如 int、boolean 和 double),它们是 不是物体

在 java 中保留原始类型是一个经过深思熟虑的设计选择。原因如下:

立即学习Java免费学习笔记(深入)”;

  • 内存效率: 与对应的对象(如 integer 或 boolean)相比,原始类型占用 更少的内存

  • 性能提升:基元上的操作更快,因为它们避免了对象创建和引用管理的开销。

  • 方便:原始类型使简单情况下的代码更加简洁,尤其是在处理算术和逻辑运算时。

简而言之,java 通过提供性能和内存效率的原语来实现平衡,同时还提供包装类(如 integer),以便您需要将这些值视为对象时。


1. 抽象:隐藏不必要的细节

抽象意味着隐藏内部逻辑并仅向用户公开基本功能。它允许用户在高层与对象交互,而无需担心底层复杂性。可以将其视为使用atm——您只需输入要取款的金额,而不需要知道atm如何与您的银行交互来处理交易。

在java中,抽象类接口通过定义基本方法并将内部细节留给子类或父类来帮助实现抽象但对用户隐藏。

例子:

abstract class payment {
    // a method with concrete logic, hidden from the user.
    private void authenticate() {
        system.out.println("authenticating payment...");
    }

    // abstract method that child classes must implement.
    abstract void processpayment(double amount);

    // public method exposing only the necessary details.
    public void makepayment(double amount) {
        authenticate();  // hidden complexity
        processpayment(amount);  // exposed to child classes
        system.out.println("payment completed.");
    }
}

// concrete class implementing the abstract method.
class creditcardpayment extends payment {
    @override
    void processpayment(double amount) {
        system.out.println("processing credit card payment of ₹" + amount);
    }
}

public class testabstraction {
    public static void main(string[] args) {
        payment payment = new creditcardpayment(); // polymorphism in action.
        payment.makepayment(1000.00);  // only high-level interaction.
    }
}

解释:

  • 复杂性隐藏在哪里? ​​

    • authenticate() 方法代表内部逻辑(例如,用户验证、加密),对于子类和用户来说都是私有且隐藏的
    • makepayment() 方法是唯一可供用户使用的公共方法,提供了一种与支付系统交互的简单方法。
  • 抽象类有什么帮助? ​​

    • 强制子类(如creditcardpayment)实现核心逻辑(processpayment()),但子类不需要了解身份验证逻辑——它在父类中处理。
  • 用户看到了什么? ​​

    • 从用户的角度来看,他们只与 makepayment() 交互——他们不关心 身份验证信用卡付款内部如何工作

2. 多态性:相同的动作,不同的形式

多态允许对象在不同情况下表现不同。java 支持两种类型的多态:

1。编译时多态(方法重载):通过定义多个同名但参数不同的方法来实现。

例子:

class calculator {
    // compile-time polymorphism (overloading)
    int add(int a, int b) {
        return a + b;
    }
    int add(int a, int b, int c) {
        return a + b + c;
    }

    public static void main(string[] args) {
        calculator calc = new calculator();
        system.out.println(calc.add(2, 3));  // output: 5
        system.out.println(calc.add(2, 3, 4));  // output: 9
    }
}

2。运行时多态性(方法重写): 当子类提供父类中声明的方法的特定实现时实现。

例子:

class animal {
    void sound() {
        system.out.println("animals make sounds.");
    }
}

class dog extends animal {
    @override
    void sound() {
        system.out.println("dog barks.");
    }
}

public class testpolymorphism {
    public static void main(string[] args) {
        animal animal = new dog();  // runtime polymorphism
        animal.sound();  // output: dog barks
    }
}

解释:

编译时多态性通过重载add()方法来演示,而运行时多态性通过重写sound()方法来演示。

YXPHP6.0 豪华版
YXPHP6.0 豪华版

YXPHP6系统可以看做是一个模版平台,而且它又能独立工作. 而且YXPHP6系统也不需要数据库支持. 你可以开发自己的模板,也可以同步官方的模板后进行自己的二次开发,前提是您对YXPHP6要有一定的了解.YXPHP6不仅可以用作企业建站,甚至是blog,只要是您能想到的,YXPHP6几乎都可以胜任. 因为YXPHP6系统本身与模板之间可以说是独立运行的.也就是说,不管你做什么样的网站或者是应用,

下载

sound() 方法 根据对象类型的不同,其行为也有所不同。虽然animal是animal类型,但在运行时,会执行dog中重写的方法。


3. 继承:通过父子关系实现代码可重用

继承允许类(子)重用另一个类(父)的属性和行为。这可以提高代码可重用性并在类之间建立is-a关系。 java 不支持通过类多重继承以避免歧义,但允许通过接口实现。

例子:

class animal {
    void eat() {
        system.out.println("this animal eats food.");
    }
}

class dog extends animal {
    void bark() {
        system.out.println("dog barks.");
    }
}

public class testinheritance {
    public static void main(string[] args) {
        dog dog = new dog();
        dog.eat();  // inherited method from animal
        dog.bark(); // dog’s own method
    }
}

解释:

在此示例中:

  • 狗继承自 animal,这意味着狗既能

  • 这演示了代码重用——我们不需要重写 dog 类的 eat() 方法。


4. 封装:通过访问控制保护数据

封装意味着将数据(字段)和操作它的方法捆绑到一个单元(类)中。它还通过将字段设为私有并公开它们来确保数据隐藏通过 getter 和 setter

例子:

class Student {
    private String name;

    // Getter
    public String getName() {
        return name;
    }

    // Setter
    public void setName(String name) {
        this.name = name;
    }
}

public class TestEncapsulation {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("John");  // Setting data through setter
        // Accessing data through getter
        System.out.println(student.getName());
    }
}

解释:

  • 名称字段是私有的,这意味着不能从类外部直接访问它。

  • 通过公共 getter 和 setter 提供访问权限,强制数据隐藏


结论

java 的 oop 原则抽象、多态、继承和封装—构成了编写模块化、可维护和高效代码的基础。掌握了这些概念,您将能够更好地准备设计和理解复杂的系统。

在接下来的文章中,我们将通过更细致的示例、最佳实践和以面试为重点的技巧,更深入地探讨这些原则。敬请关注!


相关帖子

  • java 基础

  • 数组面试要点

  • java 内存基础

  • java 关键字要点

  • 集合框架要点

编码快乐!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

350

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

29

2025.11.30

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

84

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.6万人学习

10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号