• 4.1 继承----媒体资料库的设计


    比如我们现在想制作一个CD

    CD


    title

    artist

    numofTracks

    playingTime

    gotIt

    comment

    首先创建一个类

    import java.util.ArrayList;

    public class Database{

            private  ArrayList   listCD  =  new  ArrayList();

    }


    这时候我们用了CD,需要定义一个CD的类


    public class      CD{

            public static void main(String[] args){

                    

            }

    }

    接下来,

    在CD里面定义属性

    public class      CD{

           

                    private String title;

                    private String artist;

                    private int  numofTracks;

                    private int playingTime;

                    private boolean gotIt;

                    private String comment;

            

    }


    再来个构造器

    1. public class      CD{
    2.      
    3.                 private String title;
    4.                 private String artist;
    5.                 private int  numofTracks;
    6.                 private int playingTime;
    7.                 private boolean gotIt;
    8.                 private String comment;
    9.         
    10.         public CD(String title,String artist, int numofTracks, int playingTime,String comment){
    11.            //     super();
    12.                 this.title = title;
    13.                 this.artist = artist;
    14.                 this.numofTracks = numofTracks;
    15.                 this.playingTime = playingTime;
    16.                 this.comment = comment;
    17.         }
    18.                  public static void main(String[] args){
    19.                  }
    20. }

    当然,接下来就是输入输出了,我们在定义的Database 里面,定义成员函数,输入,输出

    import java.util.ArrayList;

    public class Database{

            private  ArrayList   listCD  =  new  ArrayList();

            public void add(CD cd){

                    listCD.add (cd);

            }

            public void list(){

                    for( CD cd : listCD){

                            cd.print();

                    }

            }

    }


    这里的参数  CD cd  ,CD 是构造的参数类型,cd是对象

    此时,我们输出,是调用了CD,所以CD类里面需要有print的成员函数

    public void print(){

            System.out.println(title+":"+artist);

    }

    然后我们到主函数里面去创建对象调用CD,添加函数

    public static void main(String[] args){

            Database db = new Database();

            db.add(new CD("abc","abc", 4, 60));  //这时候添加的参数是CD构造器里面的参数,我                                                                    //      们要进行赋值使用的}

    然后输出我们需要的东西,就是

    db.list();

    输出: abc:abc

    这很简单,我们只是把之前的记事本改了一下,以前放的是元素,现在放的是对象,只不过是放参数的时候因为容器里是对象,所以对象需要传入具体数据的话需要创建对象的对象。

    对象名.add(  new  对象类型(创建对象时构造器里面的内容———对成员初始化之后,调用的构造函数));


    db.add(new CD("abc","abc", 4, 60)); 

    第二步:如果我们需要往容器里面再加入一个元素,就是DVD,

    那我们接着在Database 里面创建一个,

    private ArrayLIist  listCD  =  new  ArrayList();

    private ArrayLIist  listDVD  =  new  ArrayList();

    当然我们创建了一个容器,容器里是对象是DVD,所以我们要创建一个DVD

    public  class DVD{

    }

    其实DVD和CD蛮像的,所以借用CD,然后做些许修改

               

    public  class DVD{

                    private String title;

                    private String director;

                    private int  playingTime;

                    private boolean gotIt = false;

                    private String comment;

    }

    这时候如果想要给DVD里面添加数据,就要在调用他的类的成员函数里面创建函数

    public void add(DVD dvd){

            listDVD.add(dvd);

    }


    至于调用的是DVD还是CD,会根据函数的重载,看传入的参数的类型,我们是自定义类型

    对于列出容器里面的东西

    public void list(){

            for(CD cd : listCD){

                    cd.print();

            }

            for(DVD dvd : listDVD){

                  dvd.print();

            }

    }


    这个  dvd是for-each 循环。这个listDVD 是存储DVD对象的容器名,对于我们存在listDVD里面的对象,我们需要为它们创建对象,所以我们在传入参数的时候需要new ,来完成对象初始化。

    当然,DVD还没有print,需要在 DVD类里面成员变量创建一个DVD,和CD类似,

    public void print(){

            System.out.println(title +":"+director );

    }


    这个时候我们在Database 类主函数里面创建对象来对DVD和CD赋值,

    public static void main(String[]  args){

            Database   db  =   new  Database();

            db.add(new  CD("abc","abc",4,60, "..."));     

            db.add(new  DVD("c","c",60, "..."));    

            db.list();

    }


    我们会发现DVD报错

    此时,我们想把创建的DVD对象传入到容器里面,但是new一个DVD的时候,需要对DVD对象的成员变量赋值,但是DVD成员变量都是private,所以需要调用DVD里面的构造函数,来创建构造器完成初始化,

    构造函数:和成员变量一样,只不过是和类名一致,new对象的时候在完成成员变量初始化之后,会被调用。我们用到this


    在DVD类里,构造器

            public DVD(String title,String director, int playingTime,String comment){

               //     super();

                    this.title = title;

                    this.artist = director;

                    this.playingTime = playingTime;

                    this.comment = comment;

            }

    然后就可以了,对于输出容器里面的对象的话,是我们在调用成员函数的所完成的,修改的话,就是在DVD和CD类的成员函数里面修改,调用的话就是在Database里面,创建成员函数,然后利用for - each 循环,将容器里面的值依次赋予自定义变量

            for(DVD dvd : listDVD){

                  dvd.print();  //DVD类型的引用类型,可以直接调用自己的属性

            }


    DVD是容器  listDVD  里面的对象的类型,也就是我们创建的DVD这个类,相当于容器里对象的属性;

    print输出的是容器里的对象,对象输出需要在DVD里面再建立一个成员变量输出。

    讨论:

    这个媒体资料库有什么问题?

    答: 代码复制赘余,修改工程量大,拓展性差.

  • 相关阅读:
    自定义Docker镜像--Jupyterlab
    C++-vector容器-函数:.resize()
    封装一个Element-ui生成一个可行内编辑的表格(vue2项目)
    【Webpack】webpack5 模块联邦(Module Federation)
    Cannot run program “D:\c\IntelliJ IDEA 2021.1.3\jbr\bin\java.exe“
    (附源码)Springboot工程技术研究中心小程序 毕业设计 201738
    Redis简介+基础知识+五大基本数据类型+三大特殊数据类型基本使用+Redis到底是单线程还是多线程?
    ElementUI RUOYI 深色适配
    Lostash同步Mysql数据到Elasticsearch(三)Elasticsearch模板与索引设置
    【软考】系统集成项目管理工程师(十)项目质量管理
  • 原文地址:https://blog.csdn.net/qq_57484399/article/details/125874152