当前位置: 首页 > news >正文

第1集丨Java中面向对象相关概念汇总

目录

  • 一、基本概念
    • 1.1 类
    • 1.2 属性
    • 1.3 方法
    • 1.4 静态
    • 1.5 包
    • 1.6 import
  • 二、高级概念
    • 2.1 构造方法
    • 2.2 继承
    • 2.3 super & this
    • 2.4 多态
    • 2.5 方法重载
    • 2.6 方法重写
    • 2.7 访问权限
    • 2.8 内部类
    • 2.9 final
    • 2.10 抽象
    • 2.11 接口
    • 2.12 匿名类

面向对象的编程思想力图使计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。即:分析问题时,以问题所涉及的事或物为中心的分析方式,具体的事或物就称为对象。
● 面向对象的三大特征
○ 继承 (Inheritance)
○ 封装 (Encapsulation)
○ 多态 (Polymorphism)

一、基本概念

1.1 类

类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义(归纳和整理);对象是实际存在的该类事物的每个个体,因而也称实例(instance)。(例如:动物是一个类,猫是类的一个对象;类设计的可大可小,例如也可以将猫设计为一个类,波斯猫是一个实例)

1.2 属性

所谓属性,其实就是类的对象的相同特征(例如猫、狗都有耳朵)。

变量和属性的区别?

  1. 变量的作用域非常小,只在当前的大括号内有效
  2. 属性不仅仅在当前类中有效,而且可以随着对象在其他地方使用
  3. 变量使用前必须初始化,否则会出现错误;属性可以不用初始化,因为JVM会帮助我们自动完成初始化,默认初始化的值取决于属性的类型。
    • 基本数据类型,默认值
      byte ,short, int ,long => 0
      float, double => 0.0
      boolean flg = false
      char = 空字符
    • 引用数据类型 => null

1.3 方法

所谓方法,其实就是类的对象的相同行为和功能(例如猫、狗都可以跑)。

1.4 静态

针对于具体对象的属性/方法称之为对象属性/方法,成员属性/方法,实例属性/方法。把和对象无关,只和类相关的称之为静态。和类相关的属性称之为静态属性 ,和类相关的方法称之为·静态方法

静态语法:就是在属性和方法前增加static 关键字

public class Test{public static void main(String[] args) {User.Sleep();System.out.println(User.name);}
}
class User{public static String name= "a ha";public static void Sleep() {System.out.println("睡觉...");}
}

注意点

  • 成员方法可以访问静态属性和静态方法。
  • 静态方法不可以访问成员属性和成员方法。

静态代码块和代码块

  1. 类的信息加载完成后,会自动调用静态代码块,可以完成静态属性的初始化功能
  2. 对象准备创建时,也会自动调用代码块,但不是静态的.
  3. 执行的顺序如下代码所示:
public class Java08_Object_Static_2 {public static void main(String[] args) {/*静态代码块执行1静态代码块执行2静态代码块执行3test...*/User.test();/*静态代码块执行1静态代码块执行2静态代码块执行3代码块执行1代码块执行2*/new User();	}
}
class User{static {// 静态代码块System.out.println("静态代码块执行1");}static {// 静态代码块System.out.println("静态代码块执行2");}static void test() {System.out.println("test...");}{System.out.println("代码块执行1");}static {// 静态代码块System.out.println("静态代码块执行3");}{System.out.println("代码块执行2");}
}

1.5 包

  1. 基本语法: package 包完整路径; 路径中的多个包使用点隔开,例如:package java.lang;
  2. 功能:package中容纳类,主要功能用于分类管理
  3. 一个类可以没有包,但是package不可以在同一个源码文件中使用多次
  4. 包名为了区分类名,所以一般全部都是小写。例如:java.lang.Object 这样我们一看就指定Object是类名。
  5. Java中存在不同包的相同名称的类,可以使用包进行区分
  6. 一般情况下,在使用类的情况下,我们都会使用类的全名(包名+ 类型),称为全类名.

1.6 import

  1. import 主要用于在使用类前准备好了。
  2. import语句只能使用在package后,class前。
  3. import关键字可以多次使用,导入多个类
  4. 如果同一个包中需要导入大量的类,那么可以使用通配符* 号来简化操作。
  5. 如果import了不同包中相同名称的类,那么还是需要在使用时增加包名。
  6. 本类包中的类,可以不需要导入
import java.sql.Date;
import java.util.*;

二、高级概念

2.1 构造方法

  1. 构造方法:专门用于构建对象
  2. 如果一个类中没有任何的构造方法,那么JVM会自动添加一个公共的,无参的构造方法,方便对象的调用
  3. 基本语法: 类名() {}
  4. 构造方法名和类名完全相同
  5. 如果类中有构造方法,那么JVM不会提供默认的构造方法
  6. 构造方法也是方法,所以也可以传递参数,但是一般传递参数的目的是用于对象属性的赋值。
  7. 类中的代码块是在构造方法之前执行的。

2.2 继承

  1. 类存在父子关系:子类可以直接获取到父类的成员属性和成员方法。
  2. 类的继承只能是单继承,一个类只能有一个父类,不能存在多个父类。
  3. 一个父类可以有多个子类。
  4. 语法: 子类 extends 父类

2.3 super & this

  1. 如果父类和子类含有相同的属性,那么可以采用特殊的关键字进行区分,super & this
  2. this 关键字默认可以不写,默认就是当前的。
  3. thissuper 不能再静态代码块和静态方法中,因为这两个关键字默认是对象中的。
class Parent {String name = "zhangsan";
}
class Child extends Parent {String name = "lisi";void test() {System.out.println(super.name);System.out.println(this.name);System.out.println(name);}
}

2.4 多态

  1. 所谓的多态,其实就是一个对象在不同场景下表现出来的不同状态和形态。
  2. 多态语法其实就是对对象的使用场景进行了约束。
  3. 一个对象可以使用的功能取决于引用变量的类型。
public class Test{public static void main(String[] args) {Person p = new Person();p.testPerson();Person p1 = new Boy();p1.testPerson();//p1.testBoy();	//不可以Person p2 = new Girl(); p2.testPerson();//p2.testGirl(); //不可以Boy boy = new Boy();boy.testBoy();Girl girl = new Girl();girl.testGirl();}
}class Person {void testPerson() {System.out.println("test person...");}
}
class Boy extends Person {void testBoy() {System.out.println("test boy...");}
}
class Girl extends Person {void testGirl() {System.out.println("test girl...");}
}

2.5 方法重载

  1. 一个类中,不能重复声明的相同的方法,也不能声明相同的属性
  2. 这里相同的方法指的是方法名,参数列表相同,和返回值类型无关
  3. 如果方法名相同,但是参数列表(个数,顺序,类型)不相同,会认为是不同的方法,只不过名称一样,这个操作在Java称之方法的重载
  4. 构造方法也存在方法的重载。

2.6 方法重写

  1. 方法的重写:父类对象的方法其实主要体现通用性,无法在特殊的场合下使用。
  2. 如果子类对象需要在特殊的场合下使用,那么就需要重写方法的逻辑,这个操作在Java中称之为方法重写
  3. 这里的重写,并不意味着父类的方法被覆盖掉,只是在当前场合不使用。如果使用super关键字还是可以访问
  4. 方法重写的要求:子类的方法和父类的方法,方法名相同,返回值类型相同,参数列表要相同

2.7 访问权限

Java中的访问权限主要分为4种:

  1. private : 私有的, 同一个类中可以使用 (同类)
  2. (default) : 默认权限, 当不设定任何权限时,JVM会默认提供权限,包(路径)权限,即:同一个包下可以使用,子包也不可以访问(同类,同包)
  3. protected : 受保护的权限, 子类可以访问。(同类、同包、子类。)
  4. public : 公共的, 任意使用

2.8 内部类

  1. 外部类:所谓的外部类,就是在源码中直接声明的类
    • Java不允许外部类使用private, protected修饰
  2. 内部类:所谓的内部类,就是类中声明的类
    • 内部类就当成外部类的属性使用即可
public class Test{public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass innerClass = outer.new InnerClass();}
}
class OuterClass {public class InnerClass {}
}

2.9 final

  1. Java中提供了一种语法,可以在数据初始化后不允许被修改,使用关键字final
  2. final 可以修饰变量:变量的值一旦初始化后无法修改
  3. final可以修饰属性:那么JVM无法自动进行初始化,需要自己进行初始化, 属性值不能发生变化
  4. 一般将final修饰的变量称之为常量,或者叫不可变变量
  5. final可以修饰方法,这个方法不能被子类重写
  6. final可以修饰类,这样类就没有子类了
  7. final不可以修饰构造方法
  8. final可以修饰方法的参数,一旦修饰,参数就无法修改。

2.10 抽象

  1. 抽象类 : 不完整的类,就是抽象类
    a. abstract class 类名
    b. 因为类不完整,所以无法直接构造对象
    c. 如果一个类是抽象类,它的方法不一定是抽象方法。

  2. 抽象方法 : 只有声明,没有实现的方法
    a. abstract 返回值类型 方法名(参数)
    b. 如果一个类中含有抽象方法,那么这个类是抽象类
    c. 抽象类无法直接构建对象,但是可以通过子类间接构建对象
    d. 如果抽象类中含有抽象方法,那么子类继承抽象类,需要重写抽象方法,将方法补充完整。

  3. abstract关键字不能和final同时使用。(因为final不允许有子类或方法不能被子类重写)

2.11 接口

  1. 所谓的接口,可以简单理解为规则
    a. 基本语法 : interface 接口名称 { 规则属性,规则的行为 }
    b. 接口其实是抽象的,所以无法构建对象
    c. 规则的属性必须为固定值,而且不能修改。
    d. 属性和行为的访问权限必须为公共的
    e. 属性应该是静态的,和某个对象无关
    f. 行为应该是抽象的,由每一个具体的对象补充完整
  2. 接口和类是两个层面的东西
    a. 接口可以继承其他接口
    b. 类的对象需要遵循接口,在java中,这个遵循,称之为实现(implements ),类需要实现接口,而且可以实现多个接口.

2.12 匿名类

  1. 在某些场合下,类的名字不重要,我们只想使用类中的方法或功能。那么此时我们可以采用特殊的语法:匿名类
  2. 所谓的匿名类,就是没有名字的类
public class Test{public static void main(String[] args) {Me me = new Me();me.sayHello( new Person() {public String name() {return "wangwu";}});}}class Me {public void sayHello(Person person) {System.out.println("Hello " + person.name());}
}
abstract class Person {public abstract String name();
}

相关文章:

第1集丨Java中面向对象相关概念汇总

目录一、基本概念1.1 类1.2 属性1.3 方法1.4 静态1.5 包1.6 import二、高级概念2.1 构造方法2.2 继承2.3 super & this2.4 多态2.5 方法重载2.6 方法重写2.7 访问权限2.8 内部类2.9 final2.10 抽象2.11 接口2.12 匿名类面向对象的编程思想力图使计算机语言中对事物的描述与…...

高性能(二)

三、读写分离和分库分表 1.读写分离 1.1 概述 将数据库的读写操作分散到不同的数据库节点上 通常一主多从一台主数据库负责写,多台从数据库负责读。 主库和从库之间会进行数据同步,以保证从库中数据的准确性。 1.2 问题及解决 1.2.1 问题 主从同…...

Allegro如何实现同一个屏幕界面分屏显示操作指导

Allegro如何实现同一个屏幕界面分屏显示操作指导 在做PCB设计的时候,会需要分屏显示,比如一边是放大的视图,另外一边是缩小的视图,Allegro支持同一个屏幕界面下进行分屏显示,如下图 而且会实时同步起来 如何分屏,具体操作如下 点击View...

前后端一些下载与配置(第二篇 第10天过后)nuxt banner redis 短信服务

NUXT 应该是不用怎么装? 有现成的 axios 还需要在npm吗 好像已经有现成的了 banner banner 笔记汇总P396 Redis Linux安装redis tar -xzvf redis-6.2.6.tar.gz cd redis-6.2.6 照着他做 然后 cd /usr/local/redis/bin ./redis-server /usr/local/redis…...

OSG三维渲染引擎编程学习之四十八:“第五章:OSG场景渲染” 之 “5.6 多重纹理映射”

目录 第五章 OSG场景渲染 5.6 多重纹理映射 5.6.1 多重纹理映射介绍 5.6.2 多重纹理映射示例...

对Node.js 的理解?优缺点?应用场景?

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…...

Bean的生命周期

所谓的生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的生命周期~~ Bean的生命周期分为以下五大部分: 实例化(为 Bean 分配内存空间) 设置属性(Bean对象注入/装配) 初…...

Python学习-----函数2.0(函数对象,名称空间,作用域-->全局变量与局部变量)

目录 前言: 1.函数对象 (1)函数对象的引用 (2)函数可以放到序列里面 (3)函数可以作为参数 , 传递给另一个函数 2.名称空间 3.作用域 (1)作用域的理解 …...

Java中Json字符串和Java对象的互转

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。诞生于 2002 年。易于人阅读和编写。同时也易于机器解析和生成。JSON 是目前主流的前后端数据传输方式。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的…...

代码随想录NO42 | 动态规划_Leetcode70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

动态规划_Leetcode70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数70. 爬楼梯 (进阶) 在原题基础上,改为:一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶…...

【C++从入门到放弃】初识C++(基础知识入门详解)

🧑‍💻作者: 情话0.0 📝专栏:《C从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! C基础…...

企业工程项目管理系统源码+spring cloud 系统管理+java 系统设置+二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...

【GPLT 三阶题目集】L3-016 二叉搜索树的结构

二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分…...

核心交换机安全多业务高性能万兆交换机

RG-S5750-24SFP/12GT交换机是锐捷网络推出的融合了高性能、高安全、多业务的新一代三层交换机。RG-S5750-24SFP/12GT 交换机能够提供灵活的介质接口,满足网络建设中不同介质的连接需要。全千兆的端口形态,加上可扩展的高密度万兆端口,提供1&a…...

Android APK 签名打包原理分析(三)【静默安装的实现方案】

背景 小编目前从事的系统定制类工作,有客户提出了,需要后台“静默安装”他们的app,也就是悄无声息的安装,而且特别强调,不可以跳出任何安装引导页面,他们的app下载完成之后,后台调用公开的android install代码,系统就后台完成安装,安装完成之后,重新打开应用就可以。…...

mulesoft MCIA 破釜沉舟备考 2023.02.14.05

mulesoft MCIA 破釜沉舟备考 2023.02.14.05 1. Refer to the exhibit.2. A Kubernetes controller automatically adds another pod replica to the resource pool in response to increased application load.3. An XA transaction Is being configured that involves a JMS c…...

结构体的三种定义方法、结构体类型名(可选标志符)什么时候可以省略

结构体的三种定义方法 一、单独定义: 先定义结构体类型,再定义变量   定义结构体的格式如下:    struct 结构体名 {    若干数据项;    } ;   其中,struct为关键字; 结构体名是用户定…...

cgo静态编译不能用glibc,用musl

Golang 的一个动态链接依赖问题 upx 是一个压缩二进制的工具,如上图,经过压缩之后,这些 binary 的体积都减少了 46%。 静态链接 CGO 的依赖 如果使用 glibc 的是,是不能静态链接的: rootf88271a666f9:/workspace# g…...

​力扣解法汇总1124. 表现良好的最长时间段

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。…...

12- 降维算法 (PCA降维/LDA分类/NMF) (数据处理)

数据降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。PCA算法有两种实现方法: 基于特征值分解协方差矩阵实现PCA算法基于SVD分解协方差矩阵实…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...