当前位置: 首页 > 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分解协方差矩阵实…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...