类间关系和内部类和数组

article/2025/10/26 9:00:29

Final关键词

定义Pepole类,运用了final修饰方法eat(),该方法不能被改写,但可以随类进行继承。
用final修饰的类,不能有子类。

内部成员类定义方式

外部类.成员类 对象名= new 外部类().new 内部类。

局部内部类
在成员方法内部定义的类,该类用于方法内部,限局部使用,外部不能被调用。

package test;public class Pepole {final public void eat() {System.out.println("人吃饭");  }}
package test;final public class Hunan extends Pepole{//成员内部类class Xiangtan{public void eat() {System.out.println("湘潭吃灯芯糕");			}public void teSe() {//省略1万行//局部内部类class Binglang{public void show() {System.out.println("湘潭生产槟榔");}}	Binglang bl=new Binglang();bl.show();		///}		}public static void main(String args[]) {final int MAXLENG=100;int x,y,z[];x=0;y=x;z=new int[5];int a[]=new int[MAXLENG];int b[][]=new int[MAXLENG][3];b[0][0]=0;System.out.println(b[0][0]);a[0]=10;a[1]=20;System.out.println(a[0]);System.out.println(a[1]);}}

数组的定义
变量类型 数组名 = new 变量类型[长度];
JAVA中数组下标从0开始。

作业上机练习排序
把三种排序方式集合到一个类中,形成一个排序的包装类,并添加降序排列的方法和打印数组的方法。

实现举例
创建包装排序类

在这里插入图片描述

创建测试类test
在测试类中实例例化Sorts类,传入数组,并选择升序和降序,可以打印数组

有实力的同学,可以在类中添加创建随机数组,可以根据传入数组的长度,自动创建随机数组的值,再打印数组排序。

接口定义代码参考

package com.java.stdy;public interface ISorts {public void setSorts(int[] list);public void selectionSort();public void printSorts(); 	
}

实现类代码参考

package com.java.stdy;
import java.util.Random;
public class Sorts implements ISorts {private int[] list;@Overridepublic void setSorts(int[] list) {this.list=list;		}public void initSort(int len){int[] tlist=new int[len];Random r= new Random();for(int i=0;i<=len-1;i++){tlist[i]=r.nextInt(100);}list=tlist;}@Overridepublic void selectionSort() {int len=list.length-1;int t;for(int i=0;i<=len;i++){		 for(int j=i+1;j<=len;j++){if(list[i]>list[j]){t=list[j];list[j]=list[i];list[i]=t;			   }	 }		 }		}//降序排列public void descSorts(){int len=list.length;int[] tlist=new int[len];  	  for(int i=0;i<=len-1;i++){tlist[i]=list[len-1-i];		  } 	  list=tlist;		}//升序排列public void ascSorts(){selectionSort();}@Override//打印数组public void printSorts() {int len=list.length;for(int i=0;i<=len-1;i++){System.out.print(list[i]+" ");			}System.out.println("");}//打印提示public void print(String s) {System.out.println(s);}		}

调用 测试类

package com.java.stdy;public class Test01 {public static void main(String args[]){//演示手动输入数组Sorts s1=new Sorts();s1.print("演示手动动输入数组");int[] list= {23,56,87,23,78,1,6,8,86,0};s1.setSorts(list);s1.printSorts();s1.selectionSort();s1.print("升序排列");s1.printSorts();s1.descSorts();s1.print("降序");s1.printSorts();s1.ascSorts();s1.print("再升序");s1.printSorts();//演示自动动输入数组Sorts s=new Sorts();	s.print("\n演示自动动输入数组");s.initSort(30);s.print("初始化20个数");s.printSorts();s.selectionSort();s.print("升序排列");s.printSorts();s.descSorts();s.print("降序");s.printSorts();s.ascSorts();s.print("再升序");s.printSorts();}}

运行结果

演示手动动输入数组
23 56 87 23 78 1 6 8 86 0 
升序排列
0 1 6 8 23 23 56 78 86 87 
降序
87 86 78 56 23 23 8 6 1 0 
再升序
0 1 6 8 23 23 56 78 86 87 演示自动动输入数组
初始化20个数
37 12 36 9 18 80 24 17 77 40 43 98 46 80 70 69 32 74 90 41 56 82 22 94 5 34 44 62 46 23 
升序排列
5 9 12 17 18 22 23 24 32 34 36 37 40 41 43 44 46 46 56 62 69 70 74 77 80 80 82 90 94 98 
降序
98 94 90 82 80 80 77 74 70 69 62 56 46 46 44 43 41 40 37 36 34 32 24 23 22 18 17 12 9 5 
再升序
5 9 12 17 18 22 23 24 32 34 36 37 40 41 43 44 46 46 56 62 69 70 74 77 80 80 82 90 94 98 

-------------------------------------------------------------------------------------

相关知识点

排序算法
01 冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

1.1 算法描述

比较相邻的元素。如果第一个比第二个大,就交换它们两个;

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;

针对所有的元素重复以上的步骤,除了最后一个;

重复步骤1~3,直到排序完成。

1.2 动图演示
在这里插入图片描述
02 选择排序(Selection Sort)

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2.1 算法描述

n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

初始状态:无序区为R[1…n],有序区为空;

第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1…i-1]和R(i…n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1…i]和R[i+1…n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;

n-1趟结束,数组有序化了。

2.2 动图演示

在这里插入图片描述
03 插入排序(Insertion Sort)
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

3.1 算法描述

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

从第一个元素开始,该元素可以认为已经被排序;

取出下一个元素,在已经排序的元素序列中从后向前扫描;

如果该元素(已排序)大于新元素,将该元素移到下一位置;

重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

将新元素插入到该位置后;

重复步骤2~5。

3.2 动图演示

在这里插入图片描述
上机练习: 要求把三种方法,集成到类的成员方法,可以实现升序和降序排列
同时可以公共打印出数组

更所算法

类间关系

  1. 泛化(Generalization)继承
    【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。

【代码】:

public class Animal{}
public class Tiger extends Animal{//继承Animal类
}

【箭头指向】:带三角箭头的实线,箭头指向父类
在这里插入图片描述
2. 实现(Realization)
【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

【代码】:

public interface IBrush {//    声明一个接口(注意:接口不是类)
}
public class PenBrush implements IBrush {//    实现接口IBrush 
}

【箭头指向】:带三角箭头的虚线,箭头指向接口
在这里插入图片描述

  1. 关联(Association)
    【关联关系】分为 聚合(Aggregation) 组合(Composition)
    【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量。

【代码】:如下。


/**
* 汽车类
*/
public class Car{//引擎private Engine engine;//轮胎private Tire tire;
}/**
* 引擎类
*/
public class Engine{}/**
* 轮胎类
*/
public class Tire{}

【箭头及指向】:带空心菱形的实心线,菱形指向整体
在这里插入图片描述

组合(Composition)
【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量。

【代码】:如下。

//公司类
public class Company{//private Department department;}
//部门类
public class Department{}

【箭头及指向】:带实心菱形的实线,菱形指向整体
在这里插入图片描述
各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖


http://chatgpt.dhexx.cn/article/6s8gY867.shtml

相关文章

UML六种关系图示(过目不忘版)

图中&#xff0c;从左到右分别是依赖、关联、聚合、组合、实现、继承六种关系在UML图中的画法&#xff0c;有箭头&#xff0c;有菱形&#xff0c;有三角&#xff0c;他们为什么这么画呢&#xff0c;之间有什么联系呢&#xff0c;这要从全局来看。 首先&#xff0c;依赖关联关系…

类图有哪些关系?

此刻是最佳时间&#xff0c;抓住当下&#xff01;最近在学习设计模式的时候&#xff0c;时常要用到类图及它们的关联&#xff0c;所以学习了UML类图及类图之间的关系&#xff0c;转载记录一下。 首先我们需要知道什么是类图。 类图&#xff08;ClassDiagram&#xff09;是UML图…

UML中的六种关系

UML关系 1、依赖关系 是一种使用关系&#xff0c;它是对象之间耦合度最弱的一种关联方式&#xff0c;是临时性的关联。 在代码中&#xff0c;某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类&#xff08;被依赖类&#xff09;中的某些方法来完成一…

UML的六大关系

关联关系 单向关联 双向关联 自关联 聚合关系 聚合关系是关联关系的一种&#xff0c;是强关联关系&#xff0c;是整体和部分之间的关系 聚合关系通过成员对象来实现的&#xff0c;其中成员对象是整体对象的一部分&#xff0c;但是成员对象可以脱离整体对象而独立存在。例如&…

部分和问题

题目来源 挑战程序设计竞赛&#xff08;第二版&#xff09; 语言 C/C 题目 部分和问题 描述 给定整数 a1, a2, ..., an&#xff0c;判断是否可以从中选出若干数&#xff0c;使它们的和恰好为 k。 样例1 输入&#xff1a; n 4 a {1, 2, 4, 7}; k 13 输出&#xff1a…

【UML】2.部分与整体的媒介:关系

UML模块中的任何事物都不是独立存在的&#xff0c;他们之间存在着一定的关系。下面就对这些关系&#xff0c;分类了解一下。 一&#xff0e;概念 【关联】Association 两个类存在某种语义上的联系&#xff0c;关联有单向关联和双向关联。 【聚合】Aggregation 类之间是整体…

干货!基于部分-整体关系的概念、关系和物理场景认知推理

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 人类视觉感知的一个关键方面是能够将视觉场景解析为单个对象并进一步分解为对象部分&#xff0c;形成部分-整体层次结构。这种复合结构可以产生丰富的语义概念和关系&#xff0c;从而在视觉信号的解释和组织以及…

设计模式.组合模式(整体和部分关系, 树和Node,透明组合和完全组合)

抽象角度看 一棵树有很多节点&#xff0c;根据位置可以分为&#xff1a;根节点&#xff0c;中间节点&#xff0c;叶子节点 所有的节点都是树节点 这两句话转换为代码就是&#xff1a; 你可以有三个Node类&#xff0c;RootNode&#xff0c;TempNode&#xff0c;LeafNode。当然…

HINSTANCE (句柄相关)

在win32下与HMODULE是相同的东西&#xff0c;在Win32下还存在主要是因为win16   程序使用HINSTANCE来区别task。   区别&#xff1a;   Handle 是代表系统的内核对象&#xff0c;如文件句柄&#xff0c;线程句柄&#xff0c;进程句柄。   HMODULE 是代表应用程序载入的…

为什么需要传递HINSTANCE给CreateWindow?

Win32中有两个API函数&#xff0c;CreateWindow和RegisterClass。它们有一个HINSTANCE参数&#xff0c;很多人对这个参数不是很理解&#xff0c;今天就来讲一讲。 窗口类的名称还不足以唯一地确定这个窗口类。每一个进程都会拥有它自己的窗口类列表&#xff0c;而在这个列表中…

HINSTANCE数据类型

作者&#xff1a;马 岩&#xff08;Furzoom&#xff09; &#xff08;http://www.cnblogs.com/furzoom/&#xff09;版权声明&#xff1a;本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接&#xff0c;未经作者同意请不要删除此段声明&#xff0c;感谢…

【引用】HINSTANCE

在win32下与HMODULE是相同的东西&#xff0c;在Win32下还存在主要是因为win16 程序使用HINSTANCE来区别task。 区别&#xff1a; Handle 是代表系统的内核对象&#xff0c;如文件句柄&#xff0c;线程句柄&#xff0c;进程句柄。 HMODULE 是代表应用程序载入的模块&#xff0c;…

hInstance是什么参数?

熟悉C编程的人都知道main函数带有2个参数&#xff1a;arc和argv&#xff0c;完整的main函数定义是&#xff1a;int main(int argc, char *argv[])。argc指示程序启动时命令行参数的个数&#xff0c;argv则包含具体的参数字符串。 如果有程序叫“hello.exe”&#xff0c;直接启动…

hInstance是什么参数

熟悉C编程的人都知道main函数带有2个参数&#xff1a;arc和argv&#xff0c;完整的main函数定义是&#xff1a;int main(int argc, char *argv[])。argc指示程序启动时命令行参数的个数&#xff0c;argv则包含具体的参数字符串。 如果有程序叫“hello.exe”&#xff0c;直接启…

外卖小程序邀请入口获取推广路径

外卖小程序邀请入口 饿了么小程序邀请入口 1.手机应用商城搜索 淘宝联盟app,让后下载,登录建议直接选淘宝登录,让后按照下图的步揍即可. 淘宝联盟APP获取推广appid和path的地方&#xff0c;这是两个不同的每日红包。 2.另外饿了么小程序里面有个邀请有礼的&#xff0c;通过上…

万能门店小程序可diy完整前后端源码

这个是一位朋友付费分享的万能门店小程序&#xff0c;听他说功能挺强大的&#xff0c;功能也挺全面的。 有必须提醒一下&#xff1a;小程序代码分为前端和后端。 前端代码&#xff1a;例如&#xff1a;用“微信开发者工具”上传至微信官方审核就可以了。 后端代码&#xff1…

uniapp 生成微信小程序码

第一步创建一个容器&#xff0c;展示图片 <view style"margin: 49rpx auto;width: 300rpx;height: 300rpx;"><image :src"maskData" style"width: 100%;" longtap"longtap"></image> </view> 功能是&#x…

微信小程序的推广思路与方法,详细思路解析

简单来说&#xff0c;小程序就是微信上的APP&#xff0c;它内生于微信&#xff0c;坐享10亿流量&#xff0c;而且不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。今天&#xff0c;我们就来看一看微信小…

替你发优惠券,为了推广小程序微信真是豁出去了

微信iOS 6.6.6版本上线了! 虽然App Store的新功能里,只写了“可保留未编辑完的朋友圈”。但心细如发的道爷依然发现几大重要更新,解决的痛点,必将让10亿用户为之小嗨一把,小程序也迎来了新的春天!另外,安卓版已经正式上线了! 微趋道,就是小程序 本次主要更新了以下内…

小程序介绍

1. 小程序介绍 微信小程序&#xff0c;简称小程序&#xff0c;英文名 Mini Program &#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现 了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用 1.1 为什么是微信小程序&#xff1f; 微信有海…