探索Java面向对象编程的奇妙世界(四)

news2024/11/29 2:53:51

    • ⭐ 变量的分类和作用域
    • ⭐ 包机制(package、import)
    • ⭐ 面向对象三大特征——继承
      • ⭐ 继承的作用
      • ⭐ 继承的实现
      • ⭐ instanceof 运算符
      • ⭐ 继承使用要点
      • ⭐ 方法重写 override
      • ⭐ final 关键字
      • ⭐ 继承和组合

⭐ 变量的分类和作用域

在这里插入图片描述

变量有三种类型:局部变量、成员变量(也称为实例变量)和静态变量。

局部变量、成员变量、静态变量的核心区别

类型声明位置从属于生命周期(作用域)
局部变量方法或语句块内部方法/语句块从声明处开始,到方法或语句块结束
成员变量(实例变量)类内部,方法外部对象对象创建,成员变量也跟着创建,对象消失,成员变量也跟着消失
静态变量(类变量)类内部,static修饰类被加载,静态变量就有效

⭐ 包机制(package、import)

包(package)相当于文件夹对于文件的作用。用于管理类、用于解决类的重名问题。
在这里插入图片描述

package

package 的使用有两个要点:

🐟	通常是类的第一句非注释性语句。
🐟	包名:域名倒着写即可,便于内部管理类。

【eg】package 的命名演示

com.oracle.test;
com.it.wang.test;
com.it.wang.view;
com.it.view.model;

注意:

🐟	写项目时都要加包,不要使用默认包。
🐟	com.wang 和 com.wang.car,这是两个完全独立的包。只是逻辑上看,后者是前者的一部分。

【eg】package 的使用

package com.oldwang;
	public class Test {
		public static void main(String[ ] args) {
			System.out.println("helloworld");
	}
}

在 IDEA 项目中新建包

在 src 目录上单击右键,选择 new->package,创建 package
在这里插入图片描述
在 package 窗口上输入包名即可
在这里插入图片描述

点击 OK,即可在 src 下面看到包:
在这里插入图片描述
接下来,我们就可以在包上单击右键,新建类啦!

JDK 中的主要包

Java中的常用包说明
java.lang包含一些Java语言的核心类,如String、Math、Integer、System和Thread
java.avt包含了构成抽象窗口工具集(abstract windows toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
java.net包含执行与网络相关的操作的类
java.io包含能提供多种输入/输出功能的类
java.util包含一些使用工具类,如定义系统特性、使用与日期日历相关的函数

导入类 import

如果要使用其他包的类,需使用 import,从而在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。
在这里插入图片描述

注意:

🐟	Java 会默认导入 java.lang 包下所有的类,因此这些类我们可以直接使用。
🐟	如果导入两个同名的类,只能用包名+类名来显示调用相关类:
🐟	java.util.Date date = new java.util.Date();

静态导入

静态导入(static import): 其作用是用于导入指定类的静态属性和静态方法,这样我们可以直接使用静态属性和静态方法。

【eg】静态导入的使用

package oldwang;
import static java.lang.Math.*;//导入Math类的所有静态属性
import static java.lang.Math.PI;//导入Math类的PI属性

	public class Test{
		public static void main(String [ ] args){
			System.out.println(PI);
			System.out.println(random());
	}
}

执行结果如下所示:
在这里插入图片描述

⭐ 面向对象三大特征——继承

在这里插入图片描述

继承是面向对象编程的三大特征之一。继承让我们更加容易实现类的扩展。实现代码的重用,不用再重新发明轮子(don’t reinvent wheels)。

⭐ 继承的作用

🐟	代码复用,更加容易实现类的扩展
🐟	方便建模

⭐ 继承的实现

从英文字面意思理解,extends 的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如:
在这里插入图片描述
上图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有;在我们编程中,如果新定义一个Student类,发现已经有 Person类包含了我们需要的属性和方法,那么 Student类只需要继承 Person 类即可拥有 Person 类的属性和方法。

【eg】使用 extends 实现继承

	public class Test{
		public static void main(String[ ] args) {
			Student s = new Student("OldWang",183,"Java");
			s.rest();
			s.study();
	}
}
		class Person {
			String name;
			int height;

		public void rest(){
			System.out.println("休息一会!");
	}
}
		class Student extends Person {
			String major; //专业
		public void study(){
			System.out.println("在CSDN,学习Java");
	}
		public Student(String name,int height,String major) {
			//天然拥有父类的属性
			this.name = name;
			this.height = height;
			this.major = major;
	}
}

⭐ instanceof 运算符

instanceof 是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回 true;否则,返回 false。比如:

【eg】使用 instanceof 运算符进行类型判断

		public class Test{
			public static void main(String[ ] args) {
				Student s = new Student("OldWang",183,"Java");
				System.out.println(s instanceof Person);
				System.out.println(s instanceof Student);
	}
}

两条语句的输出结果都是 true。

⭐ 继承使用要点

🐟	父类也称作超类、基类。 子类:派生类等。
🐟	Java 中只有单继承,没有像 C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
🐟	Java 中类没有多继承,接口有多继承。
🐟	子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
🐟	如果定义一个类时,没有调用 extends,则它的父类是:java.lang.Object。

⭐ 方法重写 override

在这里插入图片描述
子类重写父类的方法,可以用自身行为替换父类行为。重写是实现多态的必要条件。

方法重写需要符合下面的三个要点:

🐟	“= =”: 方法名、形参列表相同。
🐟	“≤”:返回值类型和声明异常类型,子类小于等于父类。
🐟	“≥”: 访问权限,子类大于等于父类。

【eg】方法重写

package oldwang;
/**
 * 测试方法的重写
 */
	public class TestOverride {
		public static void main(String[ ] args) {
			Horse h = new Horse();
			Plane p = new Plane();
			h.run();
			h.getVehicle();
			p.run();
	}
}

		class Vehicle { //交通工具类
		public void run() {
			System.out.println("跑....");
	}

		public Vehicle getVehicle(){
			System.out.println("给你一个交通工具!");
			return null;
	}
}
		class Horse extends Vehicle { // 马也是交通工具
			@Override
			public void run() {
			System.out.println("得得得....");
	}
			@Override
			public Horse getVehicle() {
			return new Horse();
	}
}
		class Plane extends Vehicle {
			@Override
			public void run() {
			System.out.println("天上飞....");
		}
}

⭐ final 关键字

final 关键字的作用:

🐟	修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。final int MAX_SPEED = 120;
🐟	修饰方法:该方法不可被子类重写。但是可以被重载! final void study(){}
🐟	修饰类: 修饰的类不能被继承。比如:Math、String 等。

在这里插入图片描述
在这里插入图片描述

⭐ 继承和组合

在这里插入图片描述

除了继承,"组合"也能实现代码的复用,“组合"核心是"将父类对象作为子类的属性”。

		public class Test{
			 public static void main(String[ ] args) {
 				Student s = new Student("OldWang",183,"Java");
 				s.person.rest(); //s.rest();
				s.study();
	 }
}
		class Person {
			 String name;
			 int height;
 	
 		public void rest(){
			 System.out.println("休息一会!");
	 }
 }
		class Student /*extends Person*/ {
 			Person person = new Person();
 			String major; //专业

		 public Student(String name,int height,String major) {
 			//拥有父类的对象,通过这个对象间接拥有它的属性和方法
 			this.person.name = name; //this.name = name;
 			this.person.height = height; //this.height = height;
 			this.person.rest();
			this.major = major;
	 }
}

组合比较灵活。继承只能有一个父类,但是组合可以有多个属性。所以,有人声称"组合优于继承,开发中可以不用继承",但是,不建议大家走极端。

对于"is -a"关系建议使用继承,"has-a"关系建议使用组合。

比如:上面的例子,Student is a Person 这个逻辑没问题,但是:Student has a Person就有问题了。这时候,显然继承关系比较合适。

再比如:笔记本和芯片的关系显然是"has-a"关系,使用组合更好。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Diffusion Model 深入剖析

Diffusion Model 深入剖析 最近AI生成艺术领域非常火热,从 Midjourney 到 Stable Diffusion,不管你是绘画高手还是艺术小白,只要输入想要绘制内容的描述或者基础图像,就可以生成富有艺术感的画作! 这些风格各异、以假…

CodeForces..构建美丽数组.[简单].[情况判断].[特殊条件下的最小值奇偶问题]

题目描述&#xff1a; 题目解读&#xff1a; 给定数组a[n]&#xff0c;ai>0&#xff0c;问能否得到一个数组b[n]&#xff0c;数组b中的元素都大于0且全奇or全偶。 数组b中的元素biai or ai-aj&#xff08;1<j<n&#xff09;。 解题思路&#xff1a; 数组b中的元素都…

IDEA代码替换

IDEA代码替换 快捷键 当前文件内容 C t r l R CtrlR CtrlR 全局替换 C t r l S h i f t R CtrlShiftR CtrlShiftR 使用 第一行输入栏&#xff1a;输入被替换内容 第二行输入栏&#xff1a;输入替换内容 详细使用 第一行输入栏后第一个图标&#xff1a;换行 第一行输…

数论专题(3)逆元

目录 初步认识 逆元 定义 应用 费马小定理 好久没有更新我们的数论专题板块了&#xff0c;今天&#xff0c;我们就来探究一下新知——逆元。 初步认识 在数据非常大的情景下&#xff0c;我们通常会对数据先进行取模运算&#xff0c;来计算在一定的范围内进行处理。而运算…

SpringBoot启动扩展应用:干预优化+加快启动时间

目录 一、SpringBoot启动配置原理简述 二、SpringBoot启动过程干预 &#xff08;一&#xff09;ApplicationContextInitializer扩展 修改Spring Boot默认的environment属性 添加自定义的PropertySource 注册自定义bean &#xff08;二&#xff09;SpringApplicationRunL…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套

少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套 1、兰兰有一些数字卡片,从 1 到 100 的数字都有,她拿出几张数字卡片按照一定顺序摆放。想一想,第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案:C 考点分析:主要考查小朋友们的观察能力和数学推理能力,从给定的图…

[Nacos] Nacos Server处理心跳请求 (八)

文章目录 1.InstanceController#beat()1.1 serviceManager.registerInstance()1.2 serviceManager.getService()1.3 处理本次心跳 1.InstanceController#beat() CanDistroPutMapping("/beat")Secured(parser NamingResourceParser.class, action ActionTypes.WRITE…

面了个字节出来的00后,我见识到了什么叫“自动化测试+性能测试”

前两天看到字节一个老哥写的帖子&#xff0c;提到高阶测试工程师必须掌握的技能&#xff0c;其中他明确提出了“精通性能测试”。 为啥性能测试对测试工程师如此重要&#xff1f; 性能测试是指在特定的负载情况下&#xff0c;测试目标系统的响应时间、吞吐量、并发用户数、资源…

Eclipse 教程Ⅳ

Eclipse 工作空间(Workspace) eclipse 工作空间包含以下资源&#xff1a; 项目文件文件夹 项目启动时一般可以设置工作空间&#xff0c;你可以将其设置为默认工作空间&#xff0c;下次启动后无需再配置&#xff1a; 工作空间(Workspace)有明显的层次结构。 项目在最顶级&…

HTML 教程1

HTML文档的后缀名 .html.htm 以上两种后缀名没有区别&#xff0c;都可以使用。 HTML 实例 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body><h1&g…

QTableWidget加载大文件数据

由于最近在项目中需要加载几GB的文件&#xff0c;并且需要在QTableWidget中进行显示&#xff1b;粗略估计可能得有几千万行&#xff0c;如果使用常规的方法&#xff0c;直接在QTableWidget中进行全部显示&#xff0c;会比较卡。所以查找相关资料&#xff0c;最终想到了一个比较…

算法基础学习笔记——⑧堆\哈希表

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨堆 &#x1f353;堆模板&#xff1a; ✨哈希表 &#x1f353;一般哈希模板&#xff1a; &#x1f353;字符串哈希模板&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(…

【是C++,不是C艹】 类与对象 | 认识面向对象 | 访问限定符 | 封装 | this指针

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 在C入门之后&#xff0c;就要进入C的第一个核心&#xff1a;类与对象&#xff0c;这期带大家认识认识…

Multichain跨链无法到账,DApp真去中心化or伪去中心化?

团队出问题&#xff0c;DApp就用不了&#xff0c;multichain被不少人质疑伪去中心化&#xff0c;甚至更有人开始质疑web3&#xff0c;那么这到底是怎么回事呢&#xff1f; 跨链桥问题让DApp的去中心化引发质疑 事情是这样的&#xff0c;5月24下午0xscope发推称与multichain有关…

leetcode 11.盛最多水的容器

题目描述 跳转到leetocde题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff…

RabbitMQ手动ACK与死信队列

为了保证消息从队列可靠的达到消费者&#xff0c;RabbitMQ 提供了消息确认机制&#xff08;Message Acknowledgement&#xff09;。 默认情况下RabbitMQ在消息发出后就立即将这条消息删除,而不管消费端是否接收到,是否处理完,导致消费端消息丢失时RabbitMQ自己又没有这条消息了…

spring-Bean管理-springboot原理-Maven高级

spring-Bean管理-springboot原理-Maven高级 配置优先级Bean管理1.获取bean2.bean作用域3.第三方bean SpringBoot原理Maven高级1.分模块设计与开发2.继承与聚合3.私服1.介绍2.资源上传与下载 配置优先级 优先级(低→高) application.yaml&#xff08;忽略) application.yml appl…

利用Servlet编写第一个“hello world“(续)

利用Servlet编写第一个“hello world“ &#x1f50e;通过插件 Smart Tomcat 简化 打包代码 与 部署 操作下载Smart Tomcat配置Smart Tomcat &#x1f50e;Servlet 中的常见错误404(Not Found)&#x1f36d;请求路径出错&#x1f36d;war 包未被正确加载 405(Method Not Allowe…

【Android-JetpackCompose】13、实战在线课程 App

文章目录 一、BottomNavigation 底部导航1.1 底部导航栏的布局、点击1.2 设置 bottomBar 的颜色1.3 设置顶部 actionBar 的颜色 二、主页 StudyScreen2.1 顶部状态栏2.2 一、BottomNavigation 底部导航 1.1 底部导航栏的布局、点击 首先&#xff0c;构造 NavigationItem 的 d…

安装stable-diffusion

安装流程&#xff1a; 下载stable-diffusion源码 <https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.2.1>安装python <https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exe>添加host 打开C:\Windows\System32\drivers\etc…