【Java 小白菜入门笔记 2.1】面向对象相关

2023-05-16

实验网址:https://www.shiyanlou.com/courses/1230

类(class)

作为面向对象的Java,一切皆对象(类的实例)。用关键字class定义。
类中含有属性(变量)和方法(函数)。
变量的类型:

  1. 局部变量(定义在方法体中,用完就销毁);
  2. 成员变量(顾名思义,即class的成员,定义在方法体外,class内,这种可以被方法访问,在创建class的对象时即实例化);
  3. 静态变量(用static声明,位置与成员变量一样)

创建对象的方法

类名 对象名 = new 类名()

其实这个在前面创建基本数据类型的时候已经描述过了。比如int、string之类。如String类:

String str = new String("test")

需要注意的一个问题:局部变量和成员变量重名时,局部变量具有更高优先级。

构造方法:与类名同名,无返回值。
如果不写构造方法,则自动生成一个无参构造方法,如果写了,则不再生成无参数的构造方法。另外,多个不同的构造方法可以实现重载。

对象名实际上指代的是一个对对象实例的引用。用 == 来比较两个对象名,则实际上是在比较这两个对象名是不是指向同一个对象。(与C中的指针类似)。

static:静态变量和静态方法。这个是属于class共有的,而非其一个实例(对象)所有。因此,用static修饰的变量或方法可以不通过对象,而是直接用class来访问。
由此可以合理推出:static的方法里面不能用this,也不能用非静态的变量和方法。因为这些东西都必须经过了实例化才能用。如果static里面调用了这些非静态的,那么也就没法直接用class调用了。

class的概念有点类似柏拉图的理念。一匹理念世界的马可以形成现实世界中的多匹不同的马,而static则表示了马的一些固有属性,比如 num_legs = 4,或者has_tail = true,或者定义一个方法 run()。这些属性和方法是所有的马共有的,也就是马这个理念所带有的。因此不需要实例化一匹马出来,我们就能知道所有的马都是四条腿的。

final关键字:顾名思义,final 为最终版的意思,用final修饰的class不能被继承,修饰的方法不能被重写,修饰的变量不能被修改(也就成了常量)。

权限修饰符:public、private、protected
其中 public为公开,所有都可以用
private仅限于本class中用。
protected为本class和子类可用。
如果不加修饰符,则本类和同包内可用。

class中进行封装,通常会设置setter和getter方法,用于读取和修改private var。其好处是可以在方法中进行一些控制,比如过滤非法字符,保证安全。

this关键字用来调用属性和方法,和python类似。

继承:子类(派生类)继承父类(基类)。
格式为:

class 子类 extends 父类

继承的作用:代码复用。
继承可以实现的功能:除了private,父类的属性和方法可以访问和使用。另外,还可以重写父类的函数。当然,也可以在加入自己的属性和方法。
Java的继承是单继承。

在子类中调用父类时,用super关键字。
比如 super.属性 super.方法 可以获得父类的属性和方法
而在子类最前面super(),可以调用父类的构造函数

重载:需要保证参数不同;
重写:需要保证参数、返回值类型数量相同。

多态:必要条件:继承、重写、向上转型。
向上转型: 父类名 对象名(引用) = new 子类名()
也就是说,引用是父类的引用,子类必然包含了父类的变量和方法,因此可行(相反则不行)。
向上转型后,子类特有的变量方法被遗忘,父类的部分方法可能被重写。

抽象类:以abstract关键字标识,可以含有抽象方法,即只声明,不实现。不能直接实例化一个抽象类,需要用子类进行继承重写。往往加上@override标记出重写的方法。

接口:用interface标识。基本形态如下:

// MyInterface.java
interface MyInterface{
	int label = 1; // static final类型
	public void MyMethod(); // 必须为抽象类
}

前面说了,Java里class不能多继承,但是interface可以。

// 多重继承的实现,interface 用 extends 继承
修饰符 interface A extends 接口1,接口2{
}
// class 实现接口,需要用 implements
修饰符 class A implements 接口1,接口2{
}

接口 和 接口的方法 都是隐式抽象的,不写abstract也是抽象。
接口的方法都是public的。
接口的变量都是静态常量,也是public的。
换句话说,接口的方法都是自带这个的: public abstract
而接口的变量, 自带这个修饰符:public static final

一个类class要是想实现接口,必须实现其中所有的方法。
如果不实现,那么这个class也必须是一个abstract 抽象类。

内部类:就是类中定义的类,套娃。
内部类编译完成后和外部类是两个class,因此可以方法变量的同名。
内部类可以使用外部类的所有方法和变量。

内部类如何进行实例化?一个栗子:
这里People为外部类,Student为内部类。stuInfo为Student内部类的一个成员函数。

People a = new People();     //创建外部类对象,对象名为a
Student b = a.new Student(); //使用外部类对象创建内部类对象,对象名为b
							 // 或者为 People.Student b = a.new Student();
b.stuInfo();   //调用内部对象的suInfo方法

可以看到,这个new用的是已经实例化的一个外部类的对象的new,其它操作都一样。

内部类里面不能有static,因为static不需要实例化就能用,而内部类必须要用实例化后的外部类的对象进行创建。

对内部类加一个static,就成了 静态内部类。
静态内部类的特点,它只能访问(直接访问,不用new对象的那种)外部类的static变量。
另外,静态内部类可以直接创建: 内部类名 a = new 内部类名(),不再需要先创建一个外部类再创建内部类。

package :包,是用来区分class的命名空间的。
包的目录结构用点分割,包名都是小写。

2020-06-30 01:32:04
北京 永丰

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java 小白菜入门笔记 2.1】面向对象相关 的相关文章

  • 搭建Dashgo运行环境

    安装 设置用户的串口读取权限 span class hljs built in sudo span usermod span class hljs operator a span G dialout your user name your
  • 超声波避障

    运行如下脚本 roslaunch dashgo bringup bringup smoother ob span class hljs preprocessor launch span 在另一个终端运行 rostopic span clas
  • 虚拟机VirtualBox安装Ubuntu14.04

    本教程的运行环境 xff1a Windows 7 虚拟机 VirtualBox xff0c Ubuntu 14 04 1 准备 下载 VirtualBox5 0版可以使用后面提供的OVA镜像直接导入 xff0c 镜像是ROS的集合环境 xf
  • 树莓派实现自主导航

    使用 Flash Lidar F4 激光雷达进行自主导航 树莓派的IP假设为192 168 11 100 该教程基于地图已经建好并保存的情况下 teb amcl demo launch 的 args 参数要与前面 gmapping demo
  • 键盘控制移动

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为eaibot 默认密码为 eaibot 1 不带陀螺仪的底盘驱动 打开一个终端 xff0c 运行以下命令 xff0c 启动底盘驱动 带平滑加减
  • Dashgo-D1 不带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导
  • Dashgo-D1 带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导航模块并启动
  • Dashgo-D1 多点连续导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot 地图已经建好并引用的情况下 第一种方式 打开一个终端 xff0c ssh登录导航模块 x
  • private static final long serialVersionUID = 1L

    很显然这行代码的意思是将SerialVersionUID的值定义为一个常量 xff0c 那这是干什么的呢 xff1f 解决这个问题 xff0c 首先要了解包含SerialVersionUID的Serializable接口是什么 xff1f
  • 【善用工具】程序性能分析Gperftools初探(libwind+pprof+Kcachegrind)

    善用工具 http blog csdn net aganlengzi article details 62893533 本文主要试用的gperftool相关介绍可见 https github com gperftools gperftool
  • PowerShell文本文件、Json文件资源的读取,修改

    PowerShell文件资源的读写 文本类文件的读取 xff1a Path 61 需要读取的文件路径 不加 Raw为逐行读取 xff0c 添加则为整个文件资源的读取 data 61 Get Content Path Path data 61
  • 串口参数详解:波特率,数据位,停止位,奇偶校验位

    串口通讯 9600波特率 数据格式是8 N 1 请问一秒可以传输多少个字节的数据 xff1f 9600 xff0c n 8 1 实际上 xff0c 在发送一个字节的时候 xff0c 除了需要发送8BIT数据外 xff0c 还需要发送1bit
  • 让我们了解OSD视频叠加相关信息

    什么是视频叠加 xff1f 视频叠加就是将图片和文字信息叠加到视频信号中 xff0c 如电视台的LOGO xff0c 电影的字幕 xff0c 电视机的菜单 xff0c 都是通过视频叠加的形式显示在视频图像中的 区别于用于专业影视编辑行业的字
  • RTSP/Onvif安防视频EasyNVR内核启动正常,但视频无法播放是什么原因?

    EasyNVR是基于RTSP Onvif协议的安防视频云服务平台 xff0c 可实现设备接入 实时直播 录像 检索与回放 云存储 视频分发 级联等视频能力服务 xff0c 可覆盖全终端平台 xff08 电脑 手机 平板等终端 xff09 x
  • 海康硬盘录像机接入RTSP/onvif协议安防视频平台EasyNVR的注意事项

    EasyNVR安防视频云服务平台可支持设备通过RTSP Onvif协议接入平台 xff0c 能提供视频监控直播 录像 云存储 检索与回看 国标级联等视频能力 xff0c 可支持分发RTSP RTMP HTTP FLV WS FLV HLS
  • 安卓存储之AndroidStudio自带的sqlite配置

    当我们使用sqlite数据库时 xff0c 创建好数据库 xff0c 能在File Explorer里看到databases目录下多了一个 db文件 xff0c 但是这个表是无法查看数据库表里的内容的 所以我们准备换一种查看方式 xff0c
  • 记录《时间进度》(人生进度条)(包含自定义进度、小插件)的开发

    前言 开发的本意是想看到可视化的时间 xff0c 让我们心存敬畏 xff0c 珍惜时间 xff0c 毕竟时间一去不复返 xff01 最近灵感突突然袭来 xff0c 想着做一个时间精度条 xff1a 今天度过了多少 xff0c 这周度过了多少
  • realsense d435i标定imu与camera

    realsense d435i标定imu与camera 1 标定目的 realsense d435i包含两个红外相机 红外发射器 RGB相机和IMU四个模块 xff0c 显然四个传感器的空间位置是不同的 xff0c 我们在处理图像和IMU数
  • (转)stm32F4-----DMA的FIFO作用和用法

    在STM32F4系列中DMA增加了个FIFO 这个FIFO的作用是什么 xff1f 当我使能这个FIFO时 xff08 DMA InitStructure DMA FIFOMode 61 DMA FIFOMode Enable xff09
  • MacOS上快速下载安装brew

    推荐大家使用国内镜像源 xff0c 在MacOS上快速下载安装brew 复制下面这段命令到终端 xff0c 进入自动安装脚步步骤 xff0c 选择国内镜像源编号 1 中科大下载源 xff08 推荐 xff09 2 清华大学下载源 3 北京外

随机推荐