面向对象特性分析大全集

面向对象特性分析

    • 先进行专栏介绍
  • 面向对象总析
    • 前提小知识
    • 分类
    • 浅析封装
    • 浅析继承
    • 浅析多态
    • 面向对象编程优点
      • a
      • b
      • c
    • 核心思想
    • 实际应用
    • 总结
  • 封装概念详解
    • 关键
    • 主要目的
    • 核心思想
    • 优点
      • 1
      • 2
    • 缺点
      • 1
      • 2
    • Java代码实现封装特性
  • 继承概念详解
    • 语法示例
    • 关键
    • 主要目的
    • 核心思想
    • 优点
      • 1
      • 2
    • 缺点
      • 1
      • 2
    • Java代码实现继承特性
  • 多态概念详解
    • 关键
      • 继承
      • 方法重写
    • 主要目的
      • 灵活性
      • 可扩展性
      • 可维护性
      • 总结
    • 核心思想
      • 继承
      • 方法重写
      • 父类引用变量
      • 动态绑定
      • 总结
    • 优缺点
      • 优点
        • 代码灵活性
        • 可扩展性
        • 可维护性
        • 提高代码复用性
      • 缺点
        • 运行时开销
        • 难以理解和调试
        • 限制于父类或接口的方法
      • 总结
    • Java代码实现多态特性
      • 程序分析
    • 三大特性总结
      • 封装(Encapsulation)
      • 继承(Inheritance)
      • 多态(Polymorphism)
      • 总结

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。
在这里插入图片描述
在这里插入图片描述

面向对象总析

面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它通过将数据和操作封装在对象中,以模拟真实世界中的实体和其相互作用。面向对象编程的核心概念包括类、对象、继承、封装和多态性等。

前提小知识

在面向对象编程中,类是对象的蓝图或模板,它定义了对象的属性和行为。对象是类的实例,它具有类定义的属性和行为。通过创建类的实例,我们可以使用对象来执行特定的操作和访问其属性。
在这里插入图片描述

分类

封装、继承、多态

浅析封装

封装是面向对象编程的一个重要概念,它指的是将数据和操作封装在对象中,并通过公共接口来访问和操作这些数据。封装可以隐藏对象的内部实现细节,使得对象的使用者只需关注对象提供的接口,而不需要了解其具体实现细节。这种封装性有助于提高代码的可维护性和重用性。

浅析继承

继承是面向对象编程中的另一个重要概念,它允许一个类继承另一个类的属性和方法。通过继承,我们可以创建一个新的类,并从父类中继承其属性和方法,同时还可以添加新的属性和方法。继承可以提高代码的复用性,并且有助于创建层次结构和抽象概念。

浅析多态

多态性是面向对象编程的另一个关键概念,它允许不同的对象对同一个消息做出不同的响应。多态性可以通过方法的重写和方法的重载来实现。方法的重写指的是子类重写父类的方法,以实现特定的行为。方法的重载指的是在同一个类中定义多个具有相同名称但参数列表不同的方法,以适应不同的调用需求。

面向对象编程优点

a

它提供了一种组织和管理代码的有效方式,使得代码更易于理解和维护。

b

面向对象编程可以提高代码的重用性,通过继承和多态性,我们可以更好地利用已有的代码来创建新的功能。

c

面向对象编程还可以提高代码的可扩展性和灵活性,使得我们能够更加容易地修改和扩展现有的代码。

核心思想

将现实世界中的事物抽象成对象,并通过对象之间的交互来实现程序的功能。

实际应用

面向对象编程被广泛应用于各种编程语言和领域。许多流行的编程语言,如Java、C++和Python等,都支持面向对象编程。面向对象编程在软件开发过程中起到了重要的作用,它可以帮助开发人员更好地组织和管理代码,提高代码的可维护性和可重用性。

总结

面向对象编程是一种强大的编程范式,它通过将数据和操作封装在对象中,以模拟真实世界中的实体和其相互作用。面向对象编程的核心概念包括类、对象、继承、封装和多态性等。面向对象编程具有许多优点,包括代码的可维护性、重用性、可扩展性和灵活性。在实际应用中,面向对象编程被广泛应用于各种编程语言和领域,为软件开发过程带来了许多好处。

封装概念详解

封装是面向对象编程中的一个重要概念,它允许我们将数据和操作封装在一个单独的实体中,以便于管理使用。封装的概念在软件开发中非常常见,它提供了一种将相关数据和方法组织在一起的方式,从而提高了代码的可维护性可重用性

关键

将数据和方法封装在一个类中。类是面向对象编程的基本构建块,它定义了一组属性和方法,用于描述对象的特征和行为。通过将相关的数据和方法放在一起,我们可以更好地组织代码,并将其作为一个独立的实体进行管理。

主要目的

隐藏对象的内部实现细节,只暴露必要的接口供外部使用。这种隐藏使得对象的使用者不需要了解对象的内部工作原理,从而降低了代码的复杂性和耦合度。封装还可以提供数据的安全性,通过限制对数据的直接访问,只允许通过指定的方法来进行操作,从而避免了数据被误用或破坏。

核心思想

将数据和方法进行封装,以隐藏内部的实现细节。通过封装,我们可以将数据和方法放在一个类中,并将其对外部进行保护,只暴露必要的接口给其他类或模块使用。这样做的好处是,我们可以控制数据的访问权限,防止外部直接修改或破坏数据的一致性。

优点

1

封装可以提高代码的可维护性可复用性。通过将属性和方法封装在类的内部,我们可以隐藏实现细节,使得类的使用者只需要关注公共接口而不需要了解内部实现。这种抽象屏蔽了具体的实现细节,使得代码更易于理解和维护。此外,封装还可以促进代码的重用,因为可以将类作为一个独立的模块,在不同的项目中重复使用。

2

封装可以提高代码的安全性可靠性。通过将属性设置为私有(private)或受保护(protected),我们可以限制对其的访问和修改。这样可以有效地防止外部代码直接修改属性的值,从而保护数据的完整性。此外,通过封装,我们可以在属性或方法的访问和修改过程中添加验证逻辑,确保数据的有效性和一致性。

缺点

1

封装可能增加代码的复杂性。封装的过程中,我们需要设计合理的类结构和接口,这需要一定的设计和分析能力。

2

封装还会引入一定的性能开销。由于封装需要通过方法调用来访问属性和方法,而不是直接访问,这可能会导致一定的性能损失。因此,在性能敏感的场景中,需要权衡封装带来的开销和代码的可维护性。
在这里插入图片描述

Java代码实现封装特性

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void sayHello() {System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");}
}

在这里插入图片描述

继承概念详解

继承是面向对象编程中的一种重要概念,它允许一个类(称为子类)继承另一个类(称为父类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在父类的基础上添加、修改或覆盖功能,从而实现代码的复用和扩展。

语法示例

class SubClass(ParentClass):# 子类的

关键

子类会继承父类的所有属性和方法,包括公共属性和方法、私有属性和方法。子类可以直接访问父类的属性和方法,也可以通过重写(覆盖)父类的方法来改变其行为。

主要目的

实现代码的重用模块化,提高代码的复用性和可维护性。同时,继承还可以实现代码的扩展和定制,以及实现多态的效果。通过继承,可以更好地组织和管理代码,提高代码的可读性和可维护性。

核心思想

继承的核心思想是通过父类和子类之间的关系,实现代码的重用和扩展。通过继承,子类可以继承父类的属性和方法,并且可以在父类的基础上添加、修改或覆盖功能。这样可以实现代码的复用和扩展,提高代码的可读性和可维护性。同时,继承还可以实现多态的效果,使得不同的对象对同一个消息做出不同的响应。

优点

1

代码的重用和模块化。通过继承,子类可以继承父类的属性和方法,无需重新编写相同的代码。这样可以提高代码的复用性和可维护性,减少代码的冗余

2

继承也支持多层次的继承关系。一个类可以同时作为父类和子类,从而形成一个继承的层次结构。子类可以继承父类的属性和方法,并且可以作为其他类的父类,从而形成更复杂的继承关系。

缺点

1

继承可能导致之间的耦合性增加,子类与父类之间的关系变得紧密。这可能会导致代码的理解和维护的难度增加。

2

滥用继承可能导致继承层次过深、继承链过长,使得代码变得复杂和难以管理。因此,在设计和使用继承时需要谨慎考虑,避免过度继承和继承滥用的情况。
在这里插入图片描述

Java代码实现继承特性

// 定义一个父类Animal
class Animal {protected String name;public Animal(String name) {this.name = name;}public void eat() {System.out.println(name + " is eating.");}public void sleep() {System.out.println(name + " is sleeping.");}
}// 定义一个子类Dog,继承自Animal
class Dog extends Animal {public Dog(String name) {super(name);}public void bark() {System.out.println(name + " is barking.");}
}// 定义一个子类Cat,继承自Animal
class Cat extends Animal {public Cat(String name) {super(name);}public void meow() {System.out.println(name + " is meowing.");}
}public class Main {public static void main(String[] args) {Dog dog = new Dog("旺财");dog.eat();  // 继承自父类Animaldog.sleep();  // 继承自父类Animaldog.bark();  // 子类Dog新增的方法Cat cat = new Cat("咪咪");cat.eat();  // 继承自父类Animalcat.sleep();  // 继承自父类Animalcat.meow();  // 子类Cat新增的方法}
}

在上面的代码中,我们定义了一个父类Animal和两个子类Dog和Cat。子类Dog和Cat继承了父类Animal的属性和方法,并且可以在父类的基础上添加新的方法。

多态概念详解

多态是面向对象编程中的一个重要概念,它允许不同的对象对同一个消息做出不同的响应。多态通过继承和方法重写来实现。

关键

两个关键点:继承方法重写

继承

子类继承了父类的属性和方法,包括父类的公共、受保护和默认访问权限的方法。子类可以直接使用父类的方法,无需重新编写相同的代码。

方法重写

子类可以重写父类的方法,即在子类中定义一个与父类中同名、参数列表相同的方法。通过方法重写,子类可以根据自身的需求重新定义父类的方法。当通过父类的引用调用该方法时,实际执行的是子类中重写的方法。

主要目的

多态的主要目的是实现代码的灵活性可扩展性可维护性

灵活性

通过多态,可以根据实际的对象类型来调用相应的方法。这样可以根据不同的需求和场景,动态地选择不同的实现方式,从而使代码更加灵活。

可扩展性

通过继承和方法重写,子类可以在不修改父类代码的情况下,通过扩展父类的行为来实现自己的功能。这样可以方便地添加新的子类,并且可以在不影响原有代码的情况下进行功能的扩展。

可维护性

通过多态,可以将相同的操作应用于不同的对象,从而减少代码的重复。这样可以提高代码的可读性和可维护性,减少代码的冗余和复杂度。

总结

多态可以使代码更加灵活、可扩展和可维护,从而提高代码的质量效率。它是面向对象编程中一个重要的概念,也是实现面向对象设计原则中的开闭原则和单一职责原则的关键手段之一。

核心思想

核心思想是"一个接口,多种实现",即通过使用父类或接口的引用变量来引用不同子类的对象,从而实现对不同子类的统一操作。

继承

子类继承父类的属性和方法,可以重写父类的方法或添加新的方法。

方法重写

子类可以重写父类的方法,即在子类中重新定义和实现和父类同名的方法。

父类引用变量

可以使用父类或接口的引用变量来引用子类的对象,从而实现对不同子类的统一操作。

动态绑定

在运行时根据对象的实际类型来确定调用哪个方法,实现动态绑定。

总结

提高代码的灵活性、可扩展性和可维护性。通过多态,可以根据实际的对象类型来调用相应的方法,从而动态地选择不同的实现方式。这样可以方便地添加新的子类,并且可以在不影响原有代码的情况下进行功能的扩展。同时,多态还可以减少代码的重复,提高代码的可读性和可维护性。

优缺点

优点

代码灵活性

多态允许使用父类或接口的引用变量来引用不同子类的对象,从而实现对不同子类的统一操作。这样可以根据实际的对象类型来调用相应的方法,使代码更加灵活。

可扩展性

通过继承和方法重写,子类可以在不修改父类代码的情况下,通过扩展父类的行为来实现自己的功能。这样可以方便地添加新的子类,并且可以在不影响原有代码的情况下进行功能的扩展。

可维护性

通过多态,可以将相同的操作应用于不同的对象,从而减少代码的重复。这样可以提高代码的可读性和可维护性,减少代码的冗余和复杂度。

提高代码复用性

多态可以使代码更加通用,可以通过父类或接口的引用变量来引用不同子类的对象,从而实现对不同子类的统一操作。这样可以减少代码的重复,提高代码的复用性。

缺点

运行时开销

由于多态需要在运行时根据对象的实际类型来确定调用哪个方法,因此会引入一定的运行时开销。这可能会导致一定的性能损失。

难以理解和调试

多态的使用可能会增加代码的复杂性,特别是在涉及多层继承和多个接口的情况下。这可能会增加代码的理解和调试的难度。

限制于父类或接口的方法

通过多态,只能调用父类或接口中定义的方法,无法直接调用子类特有的方法。如果需要调用子类特有的方法,需要进行类型转换。

总结

多态是一种非常有用的特性,可以提高代码的灵活性、可扩展性和可维护性。然而,多态的使用也需要权衡性能和复杂性等因素。在合适的情况下,合理使用多态可以带来很多好处。

在这里插入图片描述

Java代码实现多态特性

// 定义一个父类 Animal
class Animal {public void sound() {System.out.println("动物发出声音");}
}// 定义子类 Dog 继承自 Animal
class Dog extends Animal {@Overridepublic void sound() {System.out.println("狗发出汪汪声");}
}// 定义子类 Cat 继承自 Animal
class Cat extends Animal {@Overridepublic void sound() {System.out.println("猫发出喵喵声");}
}// 测试代码
public class PolymorphismExample {public static void main(String[] args) {// 创建一个 Animal 对象,并调用其 sound 方法Animal animal = new Animal();animal.sound(); // 输出:动物发出声音// 创建一个 Dog 对象,并调用其 sound 方法Dog dog = new Dog();dog.sound(); // 输出:狗发出汪汪声// 创建一个 Cat 对象,并调用其 sound 方法Cat cat = new Cat();cat.sound(); // 输出:猫发出喵喵声// 使用父类的引用变量来引用不同子类的对象Animal animal1 = new Dog();animal1.sound(); // 输出:狗发出汪汪声Animal animal2 = new Cat();animal2.sound(); // 输出:猫发出喵喵声}
}

程序分析

在上述示例中,定义了一个父类 Animal,并在其内部定义了一个 sound 方法。然后分别定义了两个子类 Dog 和 Cat,并在子类中重写了 sound 方法,分别输出狗发出汪汪声和猫发出喵喵声。

三大特性总结

封装(Encapsulation)

封装是将数据和相关的操作封装在一个单元中,通过定义类来实现。封装隐藏了内部的实现细节,只暴露必要的接口给外部使用。这样可以提高代码的安全性和可维护性,同时也方便了代码的复用和扩展。

继承(Inheritance)

继承是指一个类可以派生出另一个类,派生类继承了父类的属性和方法,并可以添加自己的特定实现。继承允许代码重用,提高了代码的可维护性和扩展性。通过继承,可以建立类之间的层次关系,使得代码更加结构化和易于理解。

多态(Polymorphism)

多态是指同一个方法可以在不同的对象上产生不同的行为。多态通过方法的重写和方法的重载来实现。多态提高了代码的灵活性和可扩展性,使得程序可以根据不同的对象类型执行不同的操作。通过多态,可以编写更加通用和灵活的代码,提高了代码的可读性和可维护性。

总结

这三个特性共同构成了面向对象编程的核心,它们通过将代码组织成类和对象的结构,使得代码更加模块化、可重用和可扩展。面向对象编程的优势在于它能够更好地建模现实世界的问题,并提供了一种更加直观和可靠的开发方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/145336.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络协议】TCP报文格式

1.源端口和目的端口 源端口字段占16比特,用来写入源端口号。源端口号用来标识发送该TCP报文段的应用进程。 目的端口字段占16比特,用来写入目的端口号。目的端口号用来标识接收该TCP报文段的应用进程。 2.序号 当序号增加到最后一个时,下…

MySQL 的 C 语言接口

1. mysql_init MYSQL *mysql_init(MYSQL *mysql); mysql_init函数的作用:创建一个 MYSQL 对象(该对象用于连接数据库)。 mysql_init函数的参数: ① mysql:MYSQL 结构体指针,一般设置为 NULL 。 mysql_init函…

PL/SQL+cpolar公网访问内网Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

JVM111

JVM1 字节码与多语言混合编程 字节码 我们平时说的java字节码, 指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件,字节码文件…

十五、异常(4)

本章概要 Java 标志异常 特例:RuntimeException 使用 finally 进行清理 finally 用来做什么?在 return 中使用 finally缺憾:异常丢失 Java 标准异常 Throwable 这个 Java 类被用来表示任何可以作为异常被抛出的类。Throwable 对象可分为两…

配置OSPF路由

OSPF路由 1.OSPF路由 1.1 OSPF简介 OSPF(Open Shortest Path First,开放式最短路径优先)路由协议是另一个比较常用的路由协议之一,它通过路由器之间通告网络接口的状态,使用最短路径算法建立路由表。在生成路由表时,…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制(Attention)2.2.2、自注意力机制(Self-attention)2.2.3、多头自注意力(Multi-headed Self-attention) 2.3、transforme…

华为摄像头智能安防监控解决方案

云时代来袭,数字化正在从园区办公延伸到生产和运营的方方面面,智慧校园,柔性制造,掌上金融和电子政务等,面对各种各样的新兴业态的涌现,企业需要构建一张无所不联、随心体验、业务永续的全无线网络&#xf…

国内大语言模型的相对比较:ChatGLM2-6B、BAICHUAN2-7B、通义千问-6B、ChatGPT3.5

一、 前言 国产大模型有很多,比如文心一言、通义千问、星火、MOSS 和 ChatGLM 等等,但现在明确可以部署在本地并且开放 api 的只有 MOOS 和 ChatGLM。MOOS 由于需要的 GPU 显存过大(不量化的情况下需要80GB,多轮对话还是会爆显存…

TSM动作识别模型【详解】

文章目录 本文使用的是somethingv2数据集,解压后是如下形式; 由于该压缩数据进行了分卷操作,需要合并后才能进行解压。首先我们将下面4个json文件剪贴到其他文件夹,只保留00-19的文件,然后在该文件夹下打开cmd&#xf…

【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Python 笔记06(Mysql数据库)

一 基础 1.1 安装 MySQL下载参考:MySQL8.0安装配置教程【超级详细图解】-CSDN博客 测试是否安装并正确配置环境变量: 1.2 查看服务器是否正常运行 1.3 显示数据库 show databases; 1.4 退出 exit 1.5 python 连接 1.6 查主机IP ipconfig

一篇文章教你自动化测试如何解析excel文件?

前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是很方便的。…

SpringBoot使用Docker并上传至DockerHub

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 文章目录 1.系列文章2.构建docker镜像的方式3.docker操作3.1 安装docker3.2 查看docker镜像3.3 本地运行docker3.4 修改tag3.5 推送docker镜像3.6 远端server拉取d…

Linux 集锦 之 最常用的几个命令

Linux最常用的几个命令 ​ Linux系统中的命令那是相当地丰富,不同的版本可能还有不同的命令,不过Linux核心自带的命令大概有几百个,这个不管是什么发行版一般都是共用的。 ​ 如果希望探索Linux的所有命令,可能不太实际&#xf…

树莓派基本配置(2)

安装motion $sudo apt-get update $sudo apt-get install motion配置motion sudo nano /etc/default/motionsudo nano /etc/motion/motion.conf主要改这些参数 //让Motion作为守护进程运行 daemon on ... //用这个端口号来读取数据 stream_port 8081 ... //网络上其它主机…

力扣刷题-哈希表-求两个数组的交集

349 求两个数组的交集 题意&#xff1a;给定两个数组&#xff0c;编写一个函数来计算它们的交集。注意&#xff1a;输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 提示&#xff1a; 1 < nums1.length, nums2.length < 1000 0 < nums1[i], …

nodejs在pdf中绘制表格

需求 之前我已经了解过如何在pdf模板中填写字段了 nodejs根据pdf模板填入中文数据并生成新的pdf文件https://blog.csdn.net/ArmadaDK/article/details/132456324 但是当我具体使用的时候&#xff0c;我发现我的模板里面有表格&#xff0c;表格的长度是不固定的&#xff0c;所…

WPF 03

staticResource和dynamicResource的区别 首先看一个案例 MainWindow.xaml <Window x:Class"WpfDay03.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…

Springboot中slf4j日志的简单应用

1、注入依赖&#xff08;pom.xml&#xff09; <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version> &…