JAVA基础总结(四)之面向对象进阶

封装ArrayBox

描述

数组长度固定,并且不能进行新增,删除
为了对加深对数组与集合的理解,自己用数组封装了一个ArrayBox工具类,一个ArrayList的简单版

public class ArrayBox {

   // 属性 长度一旦确定不能被修改
   public int[] data = new int[10];
   public int size = 0;
   
   // 新增一个添加方法 可以给自己的数组新增值
   public boolean add(int element){
      //在添加之前,需要确保自己的数组有空间,容量
      this.makeSureLength(size + 1);
      // 吧数据存入数组中,有效值加一个
      data[size++] = element;
      return true;
   }
   
   // 获取某个元素
   public int get(int index){
      if(index < 0 || index >= size){
         throw new RuntimeException();
      }
      return data[index];
   }
   
   public int remove(int index){
      if(index < 0 || index >= size){
         throw new RuntimeException();
      }
      
      int oldValue = data[index];
      // 从index 开始,到size -1 为止,将后面元素依次前移
      for(int i = index, i< size -1 ;i++){
         data[i] = data[i+1];
      }
      data[--size] = 0;
      return oldValue;
   }

   // 设计一个方法,确保自己的数组有空间,容量
   public void makeSureLength(int min){
       if(min > data.length){
        // 说明方法需要的空间比数组的数组还大。说明容量不够用
        // 则需要扩容
        this.graw(min);
       }
   }
   
   // 对容量不够的进行扩容
   public void graw(int min){
       // 获取旧的数组的容量
       int oldLength = data.length;
       // 吧旧的长度右位移动1位 = 长度 除以 2的1次方
       // 右位移 除 左位移 乘
       int newLength = oldLength + (oldLength >> 1)
       // 如果计算的容量还不够,则直接用给的最小的容量
       if(newLength - min < 0 ){
           newLength = min;
       }
       data = this.copyOf(data, newLength);
   }
   
   // 吧旧数组全部移入到新数组里面
   public int[] copyOf(int[] oldArray, int newLength){
      int[] newArray = new int[newLength];
      for(int i = 0;i<oldArray.length;i++){
        newArray[i] = oldArray[i];
      }
      return newArray;
   }
}

多态

简介

多态是同一个行为具有多个不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同操作
在不同的场景不同的应用,实际上是同一个方法

优点
  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性
多态存在的三个必要条件
  • 继承
  • 重写
  • 父类引用指向子类对象
使用总结

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

类与类之间的关系

一、类与类之间的关系
类与类之间的关系

是一种继承关系,比如儿子类和人类,儿子继承人类,子类如何特化父类的所有特征和行为

Class Person {}
Class Son extends Person {}
类与接口的关系

类与接口的关系,类是接口所有特征和行为的实现

interface A {}
class B implement A {} 
类与类之间的关联

是一种拥有(has)的关系,一个类的成员变量是另一个类的实例对象,可以双向的也可以是单向

  • 聚合关系: 整体与部分的关系,表示聚合在一起,部分可以离开整体而单独存在,车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
    聚合关系是关联关系的一种,是强的关联关系,关联和聚合在语法一样,须考察具体的逻辑关系。

  • 组合关系: 是整体与部分的关系,但部分不能离开整体而单独存,比如人的肺和人体,肺不能离开人单独存在,有人肺在人体才能存活
    组合关系是关联关系的一种,是比聚合关系还要强的关系

箭头指向:带实心菱形的实线,菱形指向整体

聚合关系是关联关系的一种,是强的关联关系,关联和聚合在语法一样,须考察具体的逻辑关系。

class B {}
class A {
  private B b;
类与类之间的依赖

是一种使用(use)的关系,即一个类的实现需要另一个类的协 助,一般不使用双向的互相依赖

二、依赖和关联之间的区别

关联是“HAS”关系,依赖是“USE”关系
A类关联B类,指的是B类对象作为A类的属性存在,称为“has”关系。
A类依赖B类,指的是B的对象作为A类的方法形式参数存在,称为“use”关系。一般也包括函数参数、局部变量、返回值类型和静态方法调用这四种场景。
生命周期不同
如果A类关联B类,那么创建A类的对象时实例化B类的对象,直到A类对象被销毁,所关联的B类对象也被销毁。即只要A类对象存在,B类对象就存在。
如果A类依赖B类,那么只有当A类对象调用到相应方法时,B类对象才被临时创建,方法执行结束,B类对象即被回收,A类和B类之间的依赖关系是一种瞬时的关系。

三、关联和组合和聚合之间的关系

组合和聚合都是关联关系的一种,只不够 组合 > 聚合 > 关联

四、各种关系的强弱顺序

依赖 < 关联 < 聚合 < 组合 < 实现 = 泛化(继承)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值