Java核心之多态

举报
魏铁锤 发表于 2022/09/20 23:57:12 2022/09/20
【摘要】 ## 多态解析: 最早学一个变量------>内存空间(小容器) 只有一个 后来学一个数组------>内存空间(小容器) 存储一组一样的数据类型 好处是在于堆内存中存储的地址连续 便于循环遍历 数组创建时必须指定长度 频繁的添加或删除元素 个数固定就很不方便 再后来学习如何描述类--->利用自己描述的类ArrayBox创建对象(小容器) 存储一组元素 长度对于

多态解析:

最早学一个变量------>内存空间(小容器)	只有一个
后来学一个数组------>内存空间(小容器)	存储一组一样的数据类型
	好处是在于堆内存中存储的地址连续   便于循环遍历
	数组创建时必须指定长度    频繁的添加或删除元素  个数固定就很不方便
再后来学习如何描述类--->利用自己描述的类ArrayBox创建对象(小容器)	存储一组元素
	长度对于使用者来讲是可变的    便于循环遍历(底层就是数组)
	频繁的在ArrayBox中插入元素   从中间位置删除元素   性能不高
上次学习利用链式结构--->利用自己描述的类LinkedBox创建对象(小容器)	存储一组元素
	长度对于使用者来讲是可变的    双向链表结构  (底层实现Node对象 节点)
	更加适合于插入元素或删除元素
	每一个node对象的地址不是连续  循环效率比较慢
为了便于用于使用Box--->定义一个规则----->定义一个接口

	//为了将所有的box规则统一起来  让使用者用起来更加方便
	public interface Box{
		public boolean add(element);添加到末尾
		public void add(int index,int element);  在给定的位置中插入一个元素
		public void addAll();   将给定的box中所有的元素添加至我们现在的box中
		public int get(index);
		public int remove(index);
		public int size();
	}
	有了box可以做统一的规则约束
	每一个子类都实现同一个规则   用户使用起来很容易
	如果按照上述的方式来实现   规则添加了新的方法   所有的子类都跟着添加新的方法

	设计模式
	适配器模式  Adapter

	定义一个规则--->和尚  吃斋  念经  打坐  撞钟  习武
	缺省适配器模式
	public abstract class AbstractBox implements Box{
		public boolean add(element);
		public void add(int index,int element){//具体化
			//抛出自定义异常
		}
		public void addAll(){//具体化
			//抛出自定义异常
		}
		public int get(index);
		public int remove(index);
		public int size();

		public void rangeCheck(int index){
			if(index<0 || index>=size){
				自定义的异常
			}
		}
	}

	public class ArrayBox extends AbstractBox{
		属性用来存储真实数据elementDate[]
		属性用来记录有效元素个数  int size;

		public boolean add(element){
			//1.确保数组内部容量
			//2.将element元素存入数组的最后位置  size++
			//3.返回一个true告知用户添加成功
		}
		public int get(index){
			//1.检测index范围是否合法
			//2.将index位置的元素从数组中取出 并返回
		}
		public int remove(index){
			//1.检测index范围是否合法
			//2.获取index位置上的元素----保留起来
			//3.从index开始至size-1位置   将后面元素逐一前移覆盖
			//4.最后有效的那个元素删掉  --size
			//5.保留起来的旧元素返回
		}
		public int size(){
			//return this.size;
		}
	}

	//这是一个自定义的类型----节点
	public class Node{
		Node prev;
		int item;
		Node next;
	}
	public class LinkedBox extends AbstractBox{
		属性存储首节点first
		属性存储尾节点last
		属性存储有效元素的个数size

		public boolean add(element){
			//找一个人 将element添加在链表末尾
			//告知添加成功
		}
		public int get(index){
			//检测index是否合法
			//找一个人  帮我们找到index位置的那个Node对象
			//将node中item数据返回
		}
		public int remove(index){
			//检测index是否合法
			//找一个人  帮我们找到index位置的那个Node对象
			//找一个人  帮我们将node对象删除   将删掉node对象中的旧数据返回
			//将旧数据返回
		}
		public int size(){
			返回有效元素的个数
		}
	}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。