Java 面向对象和封装全面梳理总结

Java 面向对象和封装全面梳理总结

什么是面向对象编程?

面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计范式,它将“对象”作为程序的基本单元,通过对象之间的交互来实现程序的功能。在OOP中,每个对象都具有数据(属性)和行为(方法),对象通过调用方法来执行某些操作,并可以修改自身的状态。

OOP的核心思想是把现实世界中的事物抽象成程序中的对象,这样就可以更加自然地设计程序,减少程序出错的可能性,加快程序的开发速度。

Java 中的面向对象编程

Java是一门强类型、面向对象的编程语言,它严格遵循OOP的思想,可以说Java的全部特性都与面向对象编程有着密切的联系。

Java中的每个对象都必须是一个类的实例,类是对象共享状态和行为的集合,Java中的类包含数据(成员变量)和方法(成员方法)。可以通过创建类的实例来访问它的数据和方法。

Java中还有一个重要的概念是继承(Inheritance),它允许类继承其他类的属性和方法,从而可以节省代码并实现代码复用。

除了继承,Java中还有另一个重要的概念是多态(Polymorphism),它允许不同对象对同一消息作出不同的响应。多态是通过方法重载(Overloading)和方法重写(Overriding)实现的。

什么是封装?

封装是面向对象编程的一种基本特性,它指的是将数据和方法包装在一个单元中,并对外部隐藏实现细节,只公开一些必要的接口,从而提高代码的可维护性和重用性。

在Java中,封装是通过访问权限修饰符实现的。Java中有4种访问权限修饰符,它们分别是:

  • public:公共的,可以被任何类访问。
  • protected:受保护的,可以被子类和同一包中的类访问。
  • default(没有修饰符):默认的,可以被同一包中的类访问。
  • private:私有的,只能被本类中的方法访问。

我们可以根据数据和方法的访问权限将其划分为不同的层次,以保证代码的安全性和简洁性。

示例说明

示例一:封装的实现

public class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        p.setName("Tom");
        p.setAge(18);
        System.out.println(p.getName() + " " + p.getAge());
    }
}

在这个例子中,我们定义了一个Person类,它有两个私有的成员变量nameage,以及四个公有的成员方法setNamegetNamesetAgegetAge。我们可以通过公有的成员方法来访问和修改成员变量,从而实现了数据的封装。

Test类中,我们创建了一个Person对象p,并使用setNamesetAge方法来设置成员变量的值,然后使用getNamegetAge方法来获取成员变量的值,最终输出结果为Tom 18

示例二:继承的实现

public class Animal {
    private String name;

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

    public void shout() {
        System.out.println("Animal is shouting!");
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void shout() {
        System.out.println("Dog is shouting!");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Animal("Animal");
        a.shout();

        Dog d = new Dog("Dog");
        d.shout();
    }
}

在这个例子中,我们定义了一个Animal类,它有一个私有的成员变量name和一个公有的成员方法shoutshout方法输出了Animal is shouting!。接着我们定义了一个Dog类,它继承自Animal类,并重写了shout方法,shout方法输出了Dog is shouting!

Test类中,我们分别创建了一个Animal对象a和一个Dog对象d,并调用它们的shout方法。由于Dog继承自Animal,所以它可以调用Animal类中的方法,但由于它重写了shout方法,所以它会输出Dog is shouting!。最终输出结果为:

Animal is shouting!
Dog is shouting!

这就是多态的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 面向对象和封装全面梳理总结 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 详解SpringBoot实现JPA的save方法不更新null属性

    下面我将详细讲解如何实现SpringBoot的JPA的save方法不更新null属性的方法: 问题描述 使用SpringBoot中JPA进行开发时,对于已经存在的实体对象进行更新操作时,如果实体对象中有一些属性值为null,那么在执行save()方法时,JPA会自动将这些属性更新为null,但是我们有时候并不希望这样,我们希望保留原来已经存在的值,仅仅修改非…

    Java 2023年5月20日
    00
  • 索引和PSI存根 (Indexing and PSI Stubs)

    索引 通过索引可以快速查找元素,例如:在代码库中,查找包含某个单词或某个方法的文件。插件开发者可以使用IDE已有的索引来构建和使用自己的索引。 有以下2种索引: 文件索引 :基于文件内容构建的索引。通过该索引可以直接搜索到符合指定条件的文件 Stud索引 :基于序列化Stub trees 构建。 Stub tree 是PSI tree 的子集,只包含PSI …

    Java 2023年5月9日
    00
  • java比较两个json文件的差异及说明

    Java比较两个JSON文件的差异及说明 在日常开发中,我们经常需要比较两个JSON文件之间的差异,以判断其中的数据是否有更新或者变化。Java提供了许多方式来实现JSON文件的比较,下面将详细介绍其中的常用方法。 一、JSON文件的读取 在对JSON文件进行比较之前,我们需要先读取这两个JSON文件中的数据。 // 读取JSON文件中的内容 public …

    Java 2023年5月26日
    00
  • Spring切面优先级与基于xml的AOP实现方法详解

    Spring切面优先级与基于XML的AOP实现方法详解 在Spring中,切面是一种用于横切关注点的模块化方式。切面可以定义在XML文件中,也可以使用注解方式定义。本文将详细讲解Spring切面优先级和基于XML的AOP实现方法。 1. Spring切面优先级 在Spring中,切面的优先级是由切面的顺序决定的。切面的顺序可以通过实现Ordered接口或使用…

    Java 2023年5月18日
    00
  • SpringMVC实现文件的上传和下载实例代码

    SpringMVC实现文件的上传和下载实例代码 在Web应用程序中,文件的上传和下载是非常常见的需求。SpringMVC提供了很多方便的方式来实现文件的上传和下载。本文将详细讲解SpringMVC实现文件的上传和下载的实例代码。 文件上传 在SpringMVC中,我们可以使用MultipartFile对象来处理文件上传。MultipartFile对象是Spr…

    Java 2023年5月18日
    00
  • SpringBoot中通过实现WebMvcConfigurer参数校验的方法示例

    下面是关于“SpringBoot中通过实现WebMvcConfigurer参数校验的方法示例”的完整攻略,包含两个示例说明。 SpringBoot中通过实现WebMvcConfigurer参数校验的方法示例 在SpringBoot中,我们可以通过实现WebMvcConfigurer接口来实现参数校验的功能。WebMvcConfigurer是SpringMVC…

    Java 2023年5月17日
    00
  • 详解SpringBoot项目整合Vue做一个完整的用户注册功能

    我们来详细讲解一下“详解SpringBoot项目整合Vue做一个完整的用户注册功能”。这个攻略分两个部分:服务器端和客户端。我们分别来讲解。 服务器端 1. 创建SpringBoot项目 首先,我们需要在IDE中创建一个SpringBoot项目。可以使用Spring Initializr创建一个简单的Java Web项目,或者自己使用Maven创建。 2. …

    Java 2023年5月20日
    00
  • Java 循环队列/环形队列的实现流程

    循环队列(也称为环形队列)是一种在队列的头部和尾部可以相互转换的队列。它可以避免由于队列尾部占满而导致队列无法继续添加元素的问题。Java 中可以通过数组来实现循环队列,以下是实现流程: 1. 定义一个数组和两个指针 先定义一个数组来存储队列中的元素。定义两个指针,分别指向队列头和队列尾。 public class CircularQueue { priva…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部