java入门-面向对象的三大特性

面向对象三大特性

封装

什么是封装

封装 img是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。

封装的作用

img

访问控制符

img

方法传参-值传递

传参类型是基本类型

程序案例:

public static void main(String[] args) {

 int a = 3;

/*

 * a 是一个基本数据类型

 */

  func(a);

  System.out.println("a=" + a);

}
public static void func(int a) {

  a = a + 5;

} 

程序运行结果:

a=3

传参类型是引用类型

程序案例(一):

public static void main(String[] args) {

	Car car = new Car();

	car.setColor("黑色");

	func(car);

	System.out.println("car的颜色: " + car.getColor());

}

public static void func(Car car) {

	car.setColor("红色");

}

程序运行结果:

car的颜色: 红色

程序案例(二):

public static void main(String[] args) {

	Car car = new Car();

	car.setColor("黑色");

	func(car);

	System.out.println("car的颜色: " + car.getColor());

}

public static void func(Car car) {

	car = new Car();

	car.setColor("绿色");

}

程序运行结果:

car的颜色: 黑色

参数是引用类型的分析:

① 实参调用func(car)的没有传入引用car,而是car的值。

② 可以认为调用的时候是另外一个引用carx,此引用carx也引用此对象。

③ 在方法func()中的操作,是针对carx的,原来的car引用依然引用原对象。

继承

为什么使用继承

img

img

代码存在的问题: 代码重复。

imgimg

java的继承特点

在这里插入图片描述

继承语法

 class  A  extends  B{ 

 }

 A  c = new B();

B产生的对象是A类型,一般我们认为 c IS A A的形式.

c instaneof A : instance 关键字用来测试 c 是否是A产生的对象实例。

super关键字

父类对象的引用,super.name表示 父类的name属性,**super()**表示父类的无参构造方法。

方法覆盖(重写)

程序案例:

public class Transportation {

   public void run() { 
		System.out.println("交通工具能跑起来...");
	}
}

class Ship extends Transportation{
    
	@Override
	public void run() {
		System.out.println("轮船在水中运行...");
	}
}

方法覆盖:

  • 有继承关系
  • 子类与父类的方法名、参数类型、个数完全一致

抽象类

什么是抽象类?

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类定义

public abstract class 类名{
}

抽象类特性

  • 不能实例化,只是提供为子类继承。

  • 其它特性和普通类(非抽象类)相同。

抽象类应用场景

定义基本的属性、方法,子类去完成抽象的方法。抽象类可以完成部分通用工作,抽象放大发规范了子类的对外的方法,由子类具体完成。

程序案例:

在这里插入图片描述

接口

什么是接口?

java单继承的特性使java的子类不能同时具体继承多个类的方法。java设计者设计了接口的概念从形式上实现了多继承的能力,但是继承的方法都是抽象的,父类并没有具体实现,是一种虚拟的多继承能力,这种特殊的形式命名为接口。我们也可以把它看作一个彻底的抽象类,即所有方法都是抽象的。

接口语法
/**

* 定义接口

*/

public interface A{
}
/**

* 定义接口的实现(可以看作抽象类的子类)

*/

public class B implements A{
}

程序案例:

public interface  IRun {

int SIZE = 3;
void run();

}
接口的特性

1.数据都是常量,例如:public static final int SIZE= 1;

2.方法都是抽象的,例如:public static abstract void f();

注意:jdk1.8+,允许接口的方法中使用具体实现,不过要在方法前加****default****关键字。

default void  run() {
	System.out.println("测试接口的default关键字");

}

3.接口可以继承多个接口

interface A extends B, C{}

4.接口中没有构造方法(数据都是常量)

5.接口不能实例化,实例化方法:

接口类型 引用名称= new 接口实现类();

例如:  A  a = new B();

接口和抽象类的区别

在这里插入图片描述

instanceof 关键字

instanceof 关键字使用用来检查某一个对象是否是一个类的实例。

例如:  a  instanceof  A ;  //a 是否是A类型的实例
向上、下转型

假设定义动物类(Animal)为父类,Bird为Animal的子类。那么定义方式如下:

Animal a = new Bird(); 

向上转型

左边的类型Bird是由Animal派生出来的,a引用定义为Animal类型。即Bird类型转换为Animal,是向上转型,注意此种方式定义后,我们只能在a中看到Animal中定义的方法,Bird中扩展的方法是不可见。

向下转型

如果要使用Bird的方法呢?Bird b = (Bird) a; 类似于我们基本类型的强转,将Animal类型向下转型为Bird类型

多态

什么是多态

多态是指引用变量在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态。

在这里插入图片描述

多态的作用

应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。派生类(子类/接口的实现类)的功能可以被父类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。

程序案例:

定义方法: public void drive(IMove im){

        im.move( );

}
多态使用:  IMove im = new Ship();

drive(im);

实现多态的必要条件

  1. 存在继承/接口实现关系
  2. 父类的引用指向子类对象(即类型相同)
  3. 子类对父类方法覆盖(重写)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/619066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 自动装配

本篇主要介绍Spring Boot 自动装配的相关内容。 目录 一、什么是自动装配 二、Bean的扫描方式 ComponentScan Import ImportSelector接口 三、Spring Boot自动装配原理 一、什么是自动装配 在我们在创建Spring Boot项目时往往会根据项目需求,引入很多第三方…

Spring高手之路18——从XML配置角度理解Spring AOP

文章目录 1. Spring AOP与动态代理1.1 Spring AOP和动态代理的关系1.2 AOP基本术语 2. 通过XML配置实现Spring AOP2.1 添加Spring依赖2.2 定义业务接口和实现类2.3 定义切面类2.4 配置XML 1. Spring AOP与动态代理 1.1 Spring AOP和动态代理的关系 Spring AOP使用动态代理作为…

AI 问答 API 对接说明

我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递,同时还需要处理 Token…

Matlab/simulink永磁直驱风机的建模仿真

Matlab/simulink直驱永磁同步风机的建模仿真,跟随风速波动效果好,可以作为后期科研的基础模型

【recast-navigation-js】通过websocket获取navmesh数据并初始化

目录 说在前面目录结构websocket服务器前端结果 说在前面 操作系统:windows 11浏览器:edge版本 124.0.2478.97recast-navigation-js版本:0.29.0golang版本:1.21.5 目录结构 D:. │ go.mod │ go.sum │ main.go // websocket …

电视剧电影原声背景音乐,经典影视配乐片段音效合集

一、素材描述 本套影视配乐素材,大小1.89G,27个压缩文件。 二、素材目录 宰相刘罗锅配乐片段.rar 影视配乐65首.rar 太极张三丰原声.rar 东邪西毒原声配乐15首.rar 东方不败之风云再起配乐24首.rar 东方不败原声配乐16首.rar 电影大话西游原声配…

Ubuntu18.04解决有线网卡连接问题(不更新内核成功版)

https://www.realtek.com/Download/List?cate_id584 (需要翻一下) 不想自己去下载,直接去我资源里下载我上传的包就好啦(😂😂😂刚刚看了下别人下载要VIP还是自己去网站下很快的) 下载后解压,在…

Spring MVC(建立连接 + 请求)

文章目录 一、建立客户端和服务器的连接二、如何构造请求(传参)2.1 构造请求方式 参数通用注解2.2 传递单个参数2.3 传递多个参数2.4 传递数组/集合2.5 传递对象2.6 传递JSON 三、相关的其他请求操作3.1 获取URL中的参数 PathVariable3.2 上传文件 Requ…

HCIP-Datacom-ARST自选题库_07_割接【35道题】

一、单选题 1.在割接的测试阶段,符合以下哪一种情况的可以判断为割接成功? 网络承载的上层应用业务测试正常 网络设备的配置查看结果正常 网络流量路径正常 路由协议运行正常 2.在割接的测试阶段中,表明已经完成测试的标准是: IP设备的配置查看结…

Docker 直接运行一个 Alpine 镜像

由于镜像很小,下载时间往往很短,读者可以直接使用 docker run 指令直接运行一个 Alpine 容器,并指定运行的 Linux 指令,例如: PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…

QTreeView学习 branch 虚线设置

1、方法一&#xff1a; #include <QStyleFactory> ui.treeView->setStyle(QStyleFactory::create("windows")); 2、方法二&#xff1a; QString strtyle2 R"( QTreeView::branch:has-siblings:!adjoins-item { border-image: url(:/TreeViewDe…

Nios-II编程

文章目录 一硬件部分设计1Qsys2Quartus 二软件1Nios-II Eclipse 三运行项目及效果1配置 FPGA 一硬件部分设计 1Qsys 1创建一个项目 2点击 Tools 下拉菜单下的 Platform Designer 工具&#xff0c;启动 Platform Designer 后&#xff0c;点击 File-save&#xff0c;在文件名中…

易图讯智慧公安警用三维电子沙盘系统

智慧公安警用三维电子沙盘系统是一个结合现代科技手段&#xff0c;为公安部门提供全面、高效、智能的警务管理解决方案的系统。该系统以“情报大数据、指挥扁平化、勤务可视化、情指勤一体化”为设计思想&#xff0c;整合了多台设备、有无线通讯、短信平台、天网、交通平台、治…

活字格中如何打开指定文件夹

如何使用活字格打开指定文件夹 活字格是一款功能强大的电子表格软件&#xff0c;除了基本的表格计算功能之外&#xff0c;还提供了丰富的扩展功能&#xff0c;可以用来实现各种自动化操作。例如&#xff0c;我们可以使用活字格来打开指定的文件夹。 以下是具体的操作步骤&…

重学JavaScript高阶知识点(三)—— 详解Js中的内存管理

详解Js中的内存管理 1. 简介2. 内存生命周期3. JavaScript 的内存分配4. 垃圾回收 1. 简介 很多底层语言一般都有底层的内存管理接口&#xff0c;比如 C语言&#xff0c;可以调用对应的API去创建和释放内存空间。意思是需要手动去创建和释放内存空间&#xff0c;很明显&#x…

【C++11】列表初始化、右值引用的详细讲解(上)

前言 在一开始学C之前我们就简单的了解了一下C的发展历史。 相比较而言&#xff0c;C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全&#xff0c;不仅功能更强大&#xff0c;而且能提升程序员的开发效率加了许多特性&#xff0c;约140个新特性。使得C…

电商核心技术揭秘55:社群与粉丝经济的结合

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

OpenAI下周发布更新;TikTok将自动标记AIGC;智谱AI亮相2024 ICLR

OpenAI 官宣下周举办直播发布更新 OpenAI 今日凌晨官宣&#xff0c;将在当地时间 5 月 13 日上午十点&#xff08;北京时间 5 月 14 日凌晨两点&#xff09;在官网进行直播&#xff0c;届时将演示一些 ChatGPT 和 GPT-4 的更新。 OpenAI CEO Sam Altman 补充表示&#xff0c;届…

【论文润色心得】博士生的福音来啦!

&#x1f31f;【论文润色心得】博士生的福音来啦&#xff01;&#x1f393; &#x1f4da; 投稿屡遭拒绝&#xff1f;语言关难过&#xff1f;看这里&#xff0c;我找到了解决之道&#xff01;&#x1f469;‍&#x1f3eb; &#x1f4a1; 我的润色经历&#xff0c;从拒稿到接…

springboot整合rabbitmq的不同工作模式理解

前提是已经安装并启动了rabbitmq&#xff0c;并且项目已经引入rabbitmq&#xff0c;完成了配置。 不同模式所需参数不同&#xff0c;生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…