首页 > 编程语言 >理解Java中的面向对象

理解Java中的面向对象

时间:2024-10-11 23:46:24浏览次数:7  
标签:Java name People age lihua introduce 面向对象 理解 public

文章目录

前言

面向对象与面向过程是当今编程世界的两种编程思想,面向过程编程则侧重于以过程为导向,将问题分解为一系列的步骤和函数,通过依次执行这些函数来完成任务。面向对象编程强调以对象为中心,将数据和操作封装在对象中,通过对象之间的交互来实现程序的功能。具体两者的区别可以参考我之前的博客:https://blog.csdn.net/2401_85464956/article/details/142608653?fromshare=blogdetail&sharetype=blogdetail&sharerId=142608653&sharerefer=PC&sharesource=2401_85464956&sharefrom=from_link
本文以Java语言为例,讨论面向对象中的三大特性:封装、继承与多态

1 封装性

1.1 C语言中的封装

在C语言中也存在封装思想,比如说结构体变量。将多个数据类型组装成一个新的数据类型。换言之,我们通过封装,形成了一个新的数据类型。具体语法为:

struct 结构体名 {
    成员类型1 成员名1;
    成员类型2 成员名2;
   ...
    成员类型n 成员名n;
};

举个例子,我们声明一个结构体People,它有两个成员变量,分别为字符串型name(表名字)和整型变量age(表年龄)

# define MAXSIZE 20
struct People {
	char name[MAXSIZE];
	int age;
};

通过结构体变量名和成员运算符(.)来访问结构体的成员。
案例:

#include<stdio.h>
# define MAXSIZE 20
struct People {
	char name[MAXSIZE];
	int age;
};
int main() {
	//声明一个结构体变量,同时进行初始化
	People lihua = { "lihua",18 };
	//通过结构体变量名和成员运算符(.)来访问结构体的成员
	printf("我的名字是%s\n",lihua.name);
	printf("我的年龄是%d\n", lihua.age);
	return 0;
}

运行结果:
在这里插入图片描述

1.2 Java中的封装

1.2.1 基本概念

Java和C语言不同,Java不仅可以将多个数据类型进行封装,还可以将函数与之封装在一起形成一个新的数据类型,我们称之为类。我们将类中的成员变量也称为对象的属性,类中的函数,我们称之为方法体也称为对象的行为。
举个例子,我们定义一个People类,属性有name 、age,行为有greet()、introduce()

public class People {
    String name;
    int age;
    void greet(){
        System.out.println("你好!");
    }
    void introduce(){
        System.out.println("我是"+name+",我今年"+age+"岁了");
    }
}

1.2.2 类的使用方法

1.2.2.1 构造方法

所有的类都默认有一个构造方法,可以通过javap对生成的class文件进行反编译。在类中所有的成员变量都有一个默认的初值,比如0,null等。构造方法可以简单地理解为,在创建对象的同时更改该对象成员变量的初值。添加构造方法的代码如下:

public class People {
    String name;
    int age;
    // 默认的构造方法
    People(){

    }
    // 新定义的构造方法,在创建对象的同时更改初值
    People(String name, int age) {
        this.name = name;
        this.age = age;
    }
    void greet(){
        System.out.println("你好!");
    }
    void introduce(){
        System.out.println("我是"+name+",我今年"+age+"岁了");
    }
}

1.2.2.2 对象的创建与使用

语法:
类名 对象名=new 构造方法;
调用方法:
对象+(.)+成员变量或方法

public class Test {
    public static void main(String[] args) {
        //创建对象
        People lihua = new People();
        //查看初值
        System.out.println(lihua.name);
        System.out.println(lihua.age);
        lihua.name = "李华";
        lihua.age = 18;
        lihua.greet();
        lihua.introduce();
        //创建一个新的对象
        People xiaoming = new People("小明",20);
        //查看初值
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);
        xiaoming.greet();
        xiaoming.introduce();
    }
}

运行结果:
在这里插入图片描述

1.2.3 访问权限

定义:指对象是否可以通过“.”运算符操作自己的成员变量或通过“.”运算符调用类中的方法
访问限制修饰符:private protected和public,它们都是Java关键字,用来修饰成员变量或方法
这里不再展开阐述,后续代码就直接使用public,可以期待我后续的博客哦

2 继承性

当我们准备编写一个类的时候,发现某个类有我们所需要的成员变量和方法,如果我们想复用这个类的成员变量和方法,即在所编写的类中不用声明成员变量,不用定义方法就相当于有了这个方法,那么我们可以将编写的类定义为这个类的子类,子类可以让我们不必一切从头开始

举个例子,我们想定义一个Student类(此处指大学生),其中它也有name、age属性,拥有方法greet()、introduce(),同时他们也拥有额外的属性GPA,额外的方法getGPA()。为了区别普通people,他们想introduce一点不一样的,因此我们可以将introduce()方法进行重写

public class Student extends People{
    //此处考虑保护大学生的隐私,使用了私有属性
    //因为私有属性无法继承,所以用final关键字修饰,此处加不加都可以
    private final double GPA;
    //构造方法
    public Student(String name, int age, double GPA) {
        this.name = name;
        this.age = age;
        this.GPA = GPA;
    }
    public void introduce(){
        System.out.println("我是"+this.name+",我今年"+this.age+"岁了,是一位清澈的大学生");
    }
    public double getGPA() {
        return GPA;
    }
}

主程序:

public class Test {
    public static void main(String[] args) {
        //创建对象
        Student lihua=new Student("李华",19,4.0);
        //查看从父类继承的属性
        System.out.println(lihua.name);
        System.out.println(lihua.age);
        //调用从父类继承的方法
        lihua.greet();
        //调用重写的方法
        lihua.introduce();
        //调用子类扩展的方法
        System.out.println(lihua.getGPA());
    }
}

标准定义:继承是指一个类(子类或派生类)可以继承另一个类(父类或基类)的属性和方法。同时也能够通过重写对父类的功能进行修改,也可以在原有的基础上增加属性和方法,来对父类的功能进行扩展。

通过上面例子,我们再回头看一下这个课本上的定义,是不是更清晰了呢?

3 多态性

多态性,即是 “多种形态”,具体指同一操作作用于不同的对象可以有不同的表现形式。在 Java 中,多态性主要通过方法重写和方法重载来实现。

3.1 方法重写

方法重写在前面继承性中我们已经接触了,即子类对父类中同名方法体的重新定义。多态性就是,多个子类对父类中同一个方法体的书写,使得在调用时,出现不同的结果
举个例子,多态,因此我们再定义一个Teacher类继承People,重写方法introduce()

public class Teacher extends People {
    //构造方法
    public Teacher(String name,int age) {
        this.name=name;
        this.age=age;
    }
    //重写的方法
    void introduce(){
        System.out.println("我是"+name+",我今年"+age+"岁了,是一位人民教师");
    }

}

主程序:

public class Test {
    public static void main(String[] args) {
        //创建对象,此处使用的是上转型对象
        People lihua=new Student("李华",19,4.0);
        People wanglaoshi=new Teacher("王老师",36);
        lihua.introduce();
        wanglaoshi.introduce();
    }
}

运行结果:
在这里插入图片描述
此处使用的是上转型对象,具体使用方法可以看我之前的博客https://blog.csdn.net/2401_85464956/article/details/142696800?fromshare=blogdetail&sharetype=blogdetail&sharerId=142696800&sharerefer=PC&sharesource=2401_85464956&sharefrom=from_link
运行结果显示,调用同一个方法,显示不同的结果,即体现了多种形态

3.2 方法重载

这里不再阐述,欢迎观看我之前的博客:https://blog.csdn.net/2401_85464956/article/details/142695361?fromshare=blogdetail&sharetype=blogdetail&sharerId=142695361&sharerefer=PC&sharesource=2401_85464956&sharefrom=from_link

总结

Java 面向对象编程通过封装、继承和多态等特性,使得代码更加模块化、可维护性和可扩展性。
以上便是我对Java中的面向对象的理解,欢迎批评指正!!!

标签:Java,name,People,age,lihua,introduce,面向对象,理解,public
From: https://blog.csdn.net/2401_85464956/article/details/142863869

相关文章

  • 【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系
    前言:在前面我们已经学习了Linux的基础指令,相信大家对Linux已经有了一定的认识,今天我们来学习Linux权限的相关知识点,Linux权限是Linux初学者必须要掌握的内容目录一、Linux下用户类型二、权限基本概念三、权限的表示四、文件访问权限的相关设置方法1.chmod指令2.ch......
  • Spring源码理解 类接口说明
    FactoryBean、BeanFactoryBeanFactoryBeanFactory是管理和生产Bean的,它是用于访问SpringBean容器的根接口。,定义了管理Bean的方法,获取Bean、包含Bean、是否单例Bean、获取Bean类型等。Spring根据他提供了很多实现,如DefaultListableBeanFactory、XmlBeanFactory、Applica......
  • JavaScript-条件运算符
    条件运算符条件运算符主要是通过if和问号(?)实现。if语句if语句后面小括号内是判断条件,之后大括号内是在判断条件为真的情况下执行的语句内容。if后面可以接着跟elseif,也可以跟else,但是else必须放在最后,即所有的if和elseif都执行完了之后才能是else。注意在多个ifelse判断的语句......
  • Javascript笔试题目(一)
    1.JS查找文章中出现频率最高的单词?要在JavaScript中查找文章中出现频率最高的单词,你可以按照以下步骤进行操作:将文章转换为小写:这可以确保单词的比较是大小写不敏感的。移除标点符号:标点符号会干扰单词的计数。将文章拆分成单词:可以使用空格或其他分隔符来拆分。统计每个单......
  • springboot+vue+java高中素质评价档案系统ssm
    目录功能和技术介绍系统实现截图技术范围开发核心技术介绍:代码执行流程核心代码部分展示系统测试其他springboot项目推荐详细视频演示源码获取功能和技术介绍探索如何设计一个用户友好、响应迅速的系统界面,确保系统后端逻辑的高效和稳定性。研究如何通过SpringBoot......
  • 毕设项目案例实战II基于Java+Spring Boot+MySQL的学生选课系统的设计与实现(源码+数据
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育信息化的不......
  • JavaWeb三大组件之Servlet
    1.Servlet一、Servlet介绍1、概念Servlet(ServerApplet)是JavaServlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。2、实现过程1.客户端发送请求至服务器端;2.服务器......
  • Java使用idea自动生成CRUD代码
    要在IntelliJIDEA中自动生成CRUD代码,你可以使用Lombok插件和MyBatis-Plus插件。以下是具体步骤:首先,确保你已经安装了IntelliJIDEA。如果没有,请从官网下载并安装:https://www.jetbrains.com/idea/download/打开IntelliJIDEA,点击菜单栏的File>Settings(或者使用快捷键Ctrl+Alt+S),在......
  • java单例模式懒汉式 双重校验 关键字volatile
    Volatile关键字的作用Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2.顺序一致性:禁止指令重排序。不保证原子性一、线程可见性我们先通过一个例子来看看线程的可见性:publicclassVolatileTest{ ......
  • JavaEE: 深入解析HTTP协议的奥秘(1)
    文章目录HTTPHTTP是什么HTTP协议抓包fiddle用法HTTP请求响应基本格式HTTPHTTP是什么HTTP全称为"超文本传输协议".HTTP不仅仅能传输文本,还能传输图片,传输音频文件,传输其他的各种数据.因此它广泛应用在日常开发的各种场景中.HTTP往往是基于传输层的......