教你从实战中领悟继承(下) | 带你学《Java面向对象编程》之四十四

简介: 本节基于数组类型数据,带着读者进行数组相关操作类的编写,帮助读者彻底掌握继承。

上一篇:教你从实战中领悟继承(中) | 带你学《Java面向对象编程》之四十三
【本节目标】
通过阅读本节内容,你将进一步熟悉数组的概念与其相关操作,并对继承有更加深入的理解,甚至熟练掌握这一概念。

案例分析四(数组操作)

建立一个可以实现整型数组的操作类(Array),而后在里面可以操作的数组的大小由外部来决定,而后在Array类里面需要提供有数组的如下处理: 进行数据的增加(如果数据满了则无法增加)、可以实现数组的容量扩充、取得数组全部内容。
完成之后在此基础上再派生出两个子类:

  • 数组排序类:返回的数据必须是排序后的结果;
  • 数组反转类: 可以实现内容的首尾交换。

对于本程序而言,首先要考虑的是父类如何定义完善。
第一步:实现基本的数组操作类定义

class Array {        //数组的操作类
    private int [] data ;      //整型数组
    private int foot ;      //进行数组索引控制
    public Array(int len) {
        if (len > 0) {
          this.data = new int [len] ;    //开辟数组
        } else {
            this.data = new int [1] ;     //开辟一个空间
        }
    }
//实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小
    public void increament (int num) {
        int newData [] = new int [this.data.length + num] ;
        System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
        this.data = newData ;    //改变数组引用
    }
    public boolean add(int num) {    //数据增加
        if (this.foot < this.data.length) {    //有位置
          this.data[this.foot ++] = num ;
          return true ;
        }
        return false ;
    }
    public int[] getData () {
        return this.data ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        Array arr = new Array(5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
    }         
}

第二步:进行排序子类定义

class Array {        //数组的操作类
    private int [] data ;      //整型数组
    private int foot ;      //进行数组索引控制
    public Array(int len) {
         if (len > 0) {
              this.data = new int [len] ;    //开辟数组
         } else {
              this.data = new int [1] ;     //开辟一个空间
         }
     }
//实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小
     public void increament (int num) {
         int newData [] = new int [this.data.length + num] ;
         System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
         this.data = newData ;    //改变数组引用
     }
     public boolean add(int num) {    //数据增加
        if (this.foot < this.data.length) {    //有位置
           this.data[this.foot ++] = num ;
           return true ;
        }
        return false ;
     }
     public int[] getData () {
         return this.data ;
     }
}
class SortArray extends Array {      //定义排序子类
    public SortArray(int len) {
        super(len) ;
    }
    public int [] getData() {           //获得排序结果 
        java.util.Array.sort(super.getData()) ;      //排序
        return super.getData() ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        SortArray arr = new SortArray (5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
        int result [] = arr.getData() ; 
        for (int temp : result) {
            System.out.println(temp + “、”) ;
        }
    }         
}

第三步:定义反转子类

class Array {        //数组的操作类
    private int [] data ;      //整型数组
    private int foot ;      //进行数组索引控制
    public Array(int len) {
        if (len > 0) {
           this.data = new int [len] ;    //开辟数组
        } else {
           this.data = new int [1] ;     //开辟一个空间
        }
    }
//实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小
    public void increament (int num) {
        int newData [] = new int [this.data.length + num] ;
        System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
        this.data = newData ;    //改变数组引用
    }
    public boolean add(int num) {    //数据增加
        if (this.foot < this.data.length) {    //有位置
           this.data[this.foot ++] = num ;
           return true ;
        }
        return false ;
    }
    public int[] getData () {
        return this.data ;
    }
}
class ReverseArray extends Array {      //定义反转子类
    public ReverseArray (int len) {
        super(len) ;
    }
    public int [] getData() {           //获得排序结果
       int center = super.getData().length / 2 ;
       int head = 0 ;
       int tail = super.getData().length -1 ;
       for (int x = 0 ; x < center ; x ++) {
          int temp = super.getData() [head] = super.getData() [tail];
          super.getData() [tail] = temp ;
          head ++ ;
          tail -- ; 
       }
       return super.getData() ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        SortArray arr = new SortArray (5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
        int result [] = arr.getData() ; 
        for (int temp : result) {
            System.out.println(temp + “、”) ;
        }
    }         
}

image.png
图一 执行结果一

父类之中定义的方法名称往往都很重要,如果功能相同的时候子类应该以覆写父类的方法为优先考虑。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:三分钟带你认识注解 | 带你学《Java面向对象编程》之四十五
更多Java面向对象编程文章查看此处

相关文章
|
5月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
5月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
319 119
|
6月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
2228 8
|
6月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
992 12
|
6月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
543 100
|
6月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
750 0
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
277 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
295 1
|
6月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案