专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

面向对象的特征有哪些,java的面向对象三大特征

来源:小易整编  作者:小易  发布时间:2022-12-24 03:39
摘要:面向对象的特征有哪些,java的面向对象三大特征Java基础-面向对象三大特性封装继承多态类图泛化关系(Generalization)实现关系(Realization)聚合关系(Aggregation)组合关系(Composition)关联...

面向对象的特征有哪些,java的面向对象三大特征

  • Java 基础 - 面向对象

    • 三大特性

      • 封装

      • 继承

      • 多态

    • 类图

      • 泛化关系 (Generalization)

      • 实现关系 (Realization)

      • 聚合关系 (Aggregation)

      • 组合关系 (Composition)

      • 关联关系 (Association)

      • 依赖关系 (Dependency)

    • 参考资料

三大特性

封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。

优点:

  • 减少耦合: 可以独立地开发、测试、优化、使用、理解和修改

  • 减轻维护的负担: 可以更容易被程序员理解,并且在调试的时候可以不影响其他模块

  • 有效地调节性能: 可以通过剖析确定哪些模块影响了系统的性能

  • 提高软件的可重用性

  • 降低了构建大型系统的风险: 即使整个系统不可用,但是这些独立的模块却有可能是可用的、


以下 Person 类封装 name、gender、age 等属性,外界只能通过 get() 方法获取一个 Person 对象的 name 属性和 gender 属性,而无法获取 age 属性,但是 age 属性可以供 work() 方法使用。

注意到 gender 属性使用 int 数据类型进行存储,封装使得用户注意不到这种实现细节。并且在需要修改 gender 属性使用的数据类型时,也可以在不影响客户端代码的情况下进行。

public class Person {    private String name;    private int gender;    private int age;    public String getName() {        return name;    }    public String getGender() {        return gender == 0 ? "man" : "woman";    }    public void work() {        if (18 <= age && age <= 50) {            System.out.println(name + " is working very hard!");        } else {            System.out.println(name + " can't work any more!");        }    } }

继承

继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。

继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。

Cat 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Cat 对象。父类引用指向子类对象称为 向上转型 。

Animal animal = new Cat();

多态

多态分为编译时多态和运行时多态:

  • 编译时多态主要指方法的重载

  • 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定


运行时多态有三个条件:

  • 继承

  • 覆盖(重写)

  • 向上转型


下面的代码中,乐器类(Instrument)有两个子类: Wind 和 Percussion,它们都覆盖了父类的 play() 方法,并且在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象。在 Instrument 引用调用 play() 方法时,会执行实际引用对象所在类的 play() 方法,而不是 Instrument 类的方法。

public class Instrument {    public void play() {        System.out.println("Instrument is playing...");    } } public class Wind extends Instrument {    public void play() {        System.out.println("Wind is playing...");    } } public class Percussion extends Instrument {    public void play() {        System.out.println("Percussion is playing...");    } } public class Music {    public static void main(String[] args) {        List<Instrument> instruments = new ArrayList<>();        instruments.add(new Wind());        instruments.add(new Percussion());        for(Instrument instrument : instruments) {            instrument.play();        }    } }

类图

面向对象的特征有哪些,java的面向对象三大特征

@startuml title Generalization class Vehical class Car class Truck Vehical <|-- Car Vehical <|-- Truck @enduml

实现关系 (Realization)

用来实现一个接口,在 Java 中使用 implements 关键字。

面向对象的特征有哪些,java的面向对象三大特征

@startuml title Realization interface MoveBehavior class Fly class Run MoveBehavior <|.. Fly MoveBehavior <|.. Run @enduml

聚合关系 (Aggregation)

表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。

@startuml title Aggregation class Computer class Keyboard class Mouse class Screen Computer o-- Keyboard Computer o-- Mouse Computer o-- Screen @enduml

组合关系 (Composition)

和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。比如公司和部门,公司没了部门就不存在了。但是公司和员工就属于聚合关系了,因为公司没了员工还在。

面向对象的特征有哪些,java的面向对象三大特征

@startuml title Composition class Company class DepartmentA class DepartmentB Company *-- DepartmentA Company *-- DepartmentB @enduml

关联关系 (Association)

表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。

面向对象的特征有哪些,java的面向对象三大特征

@startuml title Association class School class Student School "1" - "n" Student @enduml

依赖关系 (Dependency)

和关联关系不同的是,依赖关系是在运行过程中起作用的。A 类和 B 类是依赖关系主要有三种形式:

  • A 类是 B 类中的(某中方法的)局部变量;

  • A 类是 B 类方法当中的一个参数;

  • A 类向 B 类发送消息,从而影响 B 类发生变化;

  • 面向对象的特征有哪些,java的面向对象三大特征

    @startuml title Dependency class Vehicle {    move(MoveBehavior) } interface MoveBehavior {    move() } note "MoveBehavior.move()" as N Vehicle ..> MoveBehavior Vehicle .. N @enduml


本文地址:百科问答频道 https://www.neebe.cn/wenda/886324.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 用java开发的游戏有哪些 java架构开发的游戏推荐2023

    用java开发的游戏有哪些 java架构开发的游戏推荐2023

    java是一种非常实用的计算机语言,正因如此也把它使用在了游戏设计中,那么用java开发的游戏有哪些呢?本期小编就将带各位小伙伴了解一下相关的内容,这项有用的技术被应用到各种不同种类的游戏制作和设计中,增加了游戏的体验感,这些游戏都具有自己...

  • 如何安装java,java安装教程

    如何安装java,java安装教程

    如何安装java,java安装教程一·下载JAVA安装包并安装1.首先去官网下载JAVA安装包,JAVA安装包下载地址:https://www.oracle点com/technetwork/java/javase/downloads/ind...

  • classpath环境变量作用,Java环境变量classpath的作用

    classpath环境变量作用,Java环境变量classpath的作用

    classpath环境变量作用,Java环境变量classpath的作用环境变量环境变量(environmentvariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操...

  • 如何数组合并,JavaScript合并数组的三种方法

    如何数组合并,JavaScript合并数组的三种方法

    如何数组合并,JavaScript合并数组的三种方法数组作为一种数据结构,表示索引项的有序集合。经常会使用到数组,尤其是将多个数组进行合并,比如将数组[1,2,3]和数组[4,5,6]合并,最终得到数组[1,2,3,4,5,6]。数组的合并...

  • 怎么解析xml文件,java解析xml文件的几种方式

    怎么解析xml文件,java解析xml文件的几种方式

    怎么解析xml文件,java解析xml文件的几种方式一、为什么使用xml文件便于不同应用程序之间通信。便于不同平台之间通信。便于不同平台之间数据共享。二、读取xml的方式xml测试文件内容如下:

  • 回到顶部如何实现,JavaScript实现回到顶部功能的五种方法

    回到顶部如何实现,JavaScript实现回到顶部功能的五种方法

    回到顶部如何实现,JavaScript实现回到顶部功能的五种方法回到顶部的功能现在基本上是网页的标配了,当你已经浏览到页面底部时,一键返回顶部的功能确实非常方便。随着用户习惯的养成,这个功能都是页面必备的。那么作为一个前端开发者,我们如何实...

  • java虚拟机是什么,深入理解java虚拟机

    java虚拟机是什么,深入理解java虚拟机

    java虚拟机是什么,深入理解java虚拟机文章目录一、Java虚拟机是什么二、为什么需要了解Java虚拟机三、JavaJDK的迭代历史四、Java虚拟机发展史与种类五、Java虚拟机规范六、Java虚拟机语言无关性七、Java虚拟机的组成...

  • java入门基础知识,java入门教程【0基础自学】

    java入门基础知识,java入门教程【0基础自学】

    java入门基础知识,java入门教程源代码组织方式Java程序由package+class组成,package对应目录的相对路径,class对应文件,如E:\Workspaces\MyEclipse10\JavaStudy\src\com...

  • 周排行
  • 月排行
  • 年排行

精彩推荐