教你从实战中领悟继承(下) | 带你学《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面向对象编程文章查看此处

相关文章
|
11天前
|
Java
怎么用Java 代码示例来展示继承的实现
本文通过Java代码示例展示继承机制:Animal为父类,Cat和Dog继承其属性与方法,并实现构造函数调用、方法重写与特有功能扩展,体现代码复用与多态特性。
50 4
|
13天前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
143 12
|
16天前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
307 100
|
19天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
150 0
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
算法 Java 开发者
Java流程控制:条件与循环结构实战
本文深入讲解编程中的流程控制结构,涵盖条件语句(if-else、switch)、循环结构(for、while、do-while)及循环控制关键字(break、continue)的使用技巧与实战案例,帮助开发者写出更清晰、高效的代码。
|
2月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
457 1
|
20天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
59 0
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
88 16