首页 > 编程语言 >Java面向对象

Java面向对象

时间:2024-07-31 16:28:13浏览次数:9  
标签:Java 重写 构造 面向对象 子类 返回值 父类 方法

Java面向对象(OOP)

学习面向对象的三条主线

1、Java中类及类的成员
2、面向对象的三大特征
3、其他关键字的使用

Java中类及类的成员

1、成员变量(或属性)
2、方法(函数)
3、构造器(或构造方法)
4、代码块(或初始化块)
5、内部类

面向对象的三大特征

封装性、继承性、多态性(+抽象性)

其他关键字的使用

this、super、abstract、interface、package、import ......
(三条主线同时推进)

面向对象

将功能封装进对象,强调具备了功能的对象,以类或对象为最小单位,考虑谁来做

面向对象中最基本的两个要素

  • 类、对象
  • 类:是对一类事物的描述,是抽象的、概念上的定义
  • 对象:由类派生出来的,是实际存在的该类事物的每个个体,因而也被称为实例
  • 万事万物皆为对象

  • 属性:对应类中的成员变量- field-(域-字段)
  • 行为:对应类中的成员方法-函数- method
  1. 类的创建及提供类的成员:属性和方法
  2. 创建类的对象-实例化类-类的实例化
  3. 调用类的相关结构:“对象.属性”或“对象.方法”
类中方法的声明和使用

1、方法的声明格式:
权限修饰符 返回值类型 方法名(形参列表){
//方法体
}
2、细节说明:

2.1、权限修饰符:指明所修饰的结构可被调用的范围大小

技巧:暂时声明方法时用public

2.2、返回值类型:有具体的数据类型 或 void(无返回值)

  1. 根据需要选择返回值类型

  2. 如果指明了具体的数据类型,则必须在方法执行的最后,返回要求的数据类型的变量或常量
  
  3. 方法体中执行到return结束方法
 
  4. void中也可以用return

2.3、方法名,属于标识名

2.4、形参列表:可以根据需要,声明方法时,提供形参列表。 如果需要声明多个形参,使用逗号隔开

封装性

封装性思想的体现

  1. 私有化类的属性,提供get() 和set()去访问和设置
  2. 类中提供私有的方法,表明此方法只能在类内部中被调用
  3. 如果类只希望在本包内被调用,则可声明为缺省状态
  4. 单例模式

Java规定的四种权限修饰符——广义上封装性的体现

  • 权限从小到大为:private < 缺省 < protected < public
  • 具体修饰范围:
    图片
    说明:任何地方:本project内有效
  • 权限修饰符可以用来修饰的结构说明:
    1. 四种权限可以修饰类内部的成员:属性、方法、构造器、内部类
    2. 类本身可以使用两种权限修饰:缺省、public
      说明:
      修饰相应的结构,体现这个结构被调用时,可见性的大小

构造器(构造方法):Constructor

构造器的作用

  • 创建类的对象
  • 初始化对象的属性

使用说明

  1. 如果我们没显式的提供类的构造器的话,则系统会默认给类提供一个默认的构造器:无参数的
  2. 我们如果显式的声明类的构造器的话,格式为:权限修饰符 类名(形参列表){}
  3. 同一个类的构造器之间构成重载。
  4. 我们如果显式的提供了类的构造器,则系统不再提供默认的空参的构造器
  5. Java的类中一定存在构造器
  6. 图片

构造器

  1. 构造器的理解
    contructor :n. 建设者、建造者
    contract:v. 建设、建造
    contraction:n. 建设、建造

  2. 构造器的作用

  • 搭配new关键字,创建类的对象
  • 在创建对象的同时,可以给对象的相关属性赋值
  1. 构造器的使用说明

构造器的声明格式:权限修饰符 类名(形参列表){}
创建类以后,没有显示提供任何构造器的情况下,系统会默认提供一个空参的构造器,且构造器的权限与类的权限相同
一旦类中显示声明了构造器,系统不再提供空参构造器。

阶段小结

  1. 在类的属性中,有哪些位置可以给属性赋值
    1⃣️默认赋值

    2⃣️显式赋值

    3⃣️构造器中赋值

    4⃣️通过“对象.方法”的方式赋值

    5⃣️通过“对象.属性”的方法赋值

  2. 这些位置执行的先后顺序是怎样的?

1⃣️->2⃣️->3⃣️->4⃣️/5⃣️

  1. 以上操作在对象创建过程中可以执行的次数如何?

1⃣️、2⃣️、3⃣️只能执行一次
4⃣️、5⃣️可以多次执行

JavaBean

概念

  • 类是公共的
  • 有一个无参的公共构造器
  • 有属性,且有对应的get、set方法

对象数组

概念

数组元素可以是基本数据类型,也可以是引用数据类型。当数组元素是引用数据类型中的类时,称之为对象数组。

面向对象特征之二:继承

理解:

生活上:财产的继承

代码层面:

  • 自上而下:定义了一个类A,在定义另一个类B时,发现B的功能包含A功能,则考虑B继承A
  • 自下而上:定义了类B、C、D等,发现BCD有相同的属性方法,则可以考虑抽取出来封装到类A中,让类BCD继承类A

继承的好处

  • 继承的出现,减少的代码的冗余,提高了代码的复用性
  • 继承的出现,更有利于代码的扩展
  • 继承的出现,让类与类之间产生了 is-a 的关系,多态的使用提供了前提
    • 继承描述事物间的所属关系,这种关系是 is-a 的关系。可见父类更用通用、更一般,子类更具体

继承中的基本概念

父类:superClass、超类、基类

子类:subClass、派生类

有了继承之后

子类就获取到了父类中声明的所有属性和方法
但是,由于封装性的影响,子类可能不能直接调用父类中的属性或方法
子类在继承父类之后还可以扩展自己特有的功能(增加特有的属性、方法)
extends:延展、扩展、延伸
子类和父类的理解要区别于集合与子集
不要为了继承而继承,在继承前要判断一下是否有“is a”的关系

默认的父类

Java中声明的类如果没有特殊声明其父类,则默认继承于java.lang.Object

补充

Java是支持多层继承的
直接父类、间接父类
Java中的子父类概念是相对的
Java中的一个父类可以有多的子类,但是一个子类只能有一个父类(Java的单继承性)

方法的重写(overwrite/override)

为什么需要方法的重写

子类在继承父类以后,就获取了父类中声明的所有方法。但是父类中的方法可能不太适用于子类。换句话说,子类需要对父类中继承过来的方法进行覆盖、覆写的操作。

何为方法的重写

子类对父类继承过来的方法的覆盖、覆写的操作就称为方法的重写

方法的重写应遵循的规则

【复习】方法声明的格式:
权限修饰符 返回值类型 方法名(含参列表)[throws 异常类型] {//方法体}
具体规则:

  1. 父类中被重写的方法与子类中重写的方法的方法名和形参列表必须相同
  2. 子类中重写的方法的权限修饰符不小于父类中被重写的方法的权限修饰符
  3. 子类不能重写父类中声明为private的方法
  4. 返回值类型

父类被重写方法的返回值类型是void,则子类中重写方法的返回值也必须是void
父类被重写方法的返回值类型是基本数据类型,则子类中重写方法的返回值类型必须与被重写的返回值类型相同
父类被重写的返回值类型为引用数据类型(比如类),则子类中重写方法的返回值类型可以与被重写的返回值类型相同 或 是被重写的返回值类型的子类

  1. 子类重写的方法抛出的异常类型可以于父类被抛出的异常类型相同或是父类被抛出的异常类型的子类

标签:Java,重写,构造,面向对象,子类,返回值,父类,方法
From: https://www.cnblogs.com/houguangpu/p/18334930

相关文章

  • 计算机Java项目|基于SpringBoot的科研工作量管理系统
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • C++面向对象编程解析
    文章目录1.概述2.作用解析3.概念解析1.类和对象2.封装(Encapsulation)3.继承(Inheritance)4.多态(Polymorphism)1.概述C++是在C语言的基础上增加了面向对象编程(OOP)特性的编程语言。面向对象编程是一种编程范式,通过将程序组织成对象的集合,这些对象包含数据和行......
  • java中队列queue操作
    文章目录前景描述方法描述结语前景描述java中的queue(队列)是比较常见的数据结构,它继承于collection(集合),但相对collection,queue提供了一些独有的功能,为特定场景下操作元素提供了便利。queue在java中的顶级接口是Queue,该接口定义了queue的基本操作一共有六个add,offer......
  • 【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!
    ​随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能,转型的优势,薪资对比,以及转型所需的知识和学习路线等。01 Java开发者能否转型......
  • 简述JavaFX-Web
    Maven版本22.x<!--https://mvnrepository.com/artifact/org.openjfx/javafx-web--><dependency><groupId>org.openjfx</groupId><artifactId>javafx-web</artifactId><version>22.0.2</version></depe......
  • Java泛型的高级应用
    引言Java泛型是Java5引入的一项强大特性,它允许开发者在编写代码时指定类型参数,从而提高代码的复用性和安全性。尽管泛型在表面上看起来简单,但它的工作原理和高级应用却涉及许多复杂的主题,如类型擦除、类型推断、以及泛型在集合和自定义类中的应用。本文将深入探讨这些高......
  • 注解(Annotation)在Java开发中的应用
    注解(Annotation)在Java开发中的应用引言注解(Annotation)是Java语言的一个特性,用于为代码提供元数据。注解可以被编译器或运行时环境用来处理代码,例如编译时检查、运行时处理等。Spring框架广泛使用了注解来简化配置和提高开发效率。本文将讲解注解的基本概念、如何自定义注......
  • 学习Java的日子 Day60 JSP
    JSP核心技术1.什么是JSPJSP和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是ServletJSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据......
  • java覆盖率检测-jacoco
    一、Jacoco简介官网地址:https://www.jacoco.org/jacoco/trunk/index.html 一、Jenkins集成jacoco1、安装JaCoCo插件jenkins->系统管理->管理插件在可用插件搜索Jacoco,搜索到安装即可  2、在job中增加“构建后操作”,选择'RecordJaCoCocoveragereport'   3、......
  • 三种语言实现二维差分(C++/Python/Java)
    题目输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1,y1,x2,y2,c其中(x1,y1)和(x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数n,......