头歌 JAVA 实训四——接口

第一关:接口练习

任务描述

本关任务:定义一个Animal接口,并按要求实现接口。

要求:

  1. Animal接口包含三个方法:  public void Speak(); //说话  public void Walk(); //行走方式  public String toString();//返回动物名称
  2. 定义Centipede(蜈蚣)类,实现Animal接口。例如: void Speak();方法显示“不发声” void Walk(); 方法显示“不知道有多少条腿走路” String toString(); 方法返回“蜈蚣”
  3. 定义Dog(狗)类,实现Animal接口。
  4. 定义People(人)类,实现Animal接口。
  5. 定义Chinese(中国人)类,继承People(人)类。
  6. 定义Britisher(英国人)类,继承People(人)类。

最后设计一个类来测试你的所有的程序,通过该例充分理解接口、继承、多态。

提示:

这个题需要注意的一点就是题目的要求写的不完整,我们需要知道实现的类(如:Dog,People)要把所有方法都重写一遍,且内容需要自己根据蜈蚣的提示写出来,而toString函数是每个类都需要重写的,这点我觉得题目给的提示不够,很离谱。

源码:

Animal.java

package step2;
//定义Animal接口
public interface Animal {
    public void Speak();
    public void Walk();
    public String toString();
}

Centipede.java

package step2;
//完成Centipede类
public class Centipede implements Animal {

    public void Speak() {
        System.out.print("不发声");
    }

    public void Walk() {
        System.out.print("不知道有多少条腿在走路");
    }
    public String toString() {
        return "蜈蚣";
    }
}

Dog.java

package step2;
//完成Dog类
public class Dog implements Animal{
    public void Speak() {
        System.out.print("发声");
    }
    public void Walk() {
        System.out.print("四条腿走路");
    }
    public String toString() {
        return "狗";
    }
}

People.java

package step2;
//完成People类
public class People implements Animal{
    public void Speak() {
        System.out.print("发声");
    }
    public void Walk() {
        System.out.print("两条腿走路");
    }
    public String toString() {
        return "人";
    }
}

Chinese.java

package step2;
//完成Chinese类
public class Chinese extends People{
    public String toString() {
        return "中国人";
    }
}

Britisher.java

package step2;
//完成Britisher类
public class Britisher extends People{
    public String toString() {
        return "英国人";
    }
}

第二关:定义一个MyList接口,并使用数组的方法来实现接口

任务描述

要求:

  1. MyList接口包含六个方法:  void add(Object obj):往列表尾部添加对象  Object get(int index):从列表中获取索引为i的对象  void clear():清空所有的对象  boolean isEmpty():判断列表中是否有对象  int size():获取列表中对象的个数  int capacity():所分配的空间大小
  2. MyObjectArray类实现MyList接口,内部以数组的方式实现,要求:  构造函数MyObjectArray(int incSize):参数incSize为数组初始化大小和空间的增量。若用户调用incSize非法,则设为默认值5。  当调用add()方法往试图往MyObjectArray中增加对象时,如果内部数组已满,则增加数组大小,增量为incSize。  调用clear()方法可以清空所有通过add()方法加入的对象。  调用get(int index)方法时,如果传入的参数非法,则返回null对象,否则返回对应的对象。
  3. MyDoubleArray类也实现ReList接口,内部依旧通过数组实现,要求:  构造函数MyDoubleArray(int initSize):参数initSize表示数组的初始化大小。若用户调用initSize非法,则设为默认值10。  当调用add()方法往MyDoubleArray列表里面增加对象时,如果其内部数组已满,则将数组的长度变为当前长度的2倍。  其他方法和MyObjectArray一致

最后设计一个类来测试你的MyObjectArray和MyDoubleArray类,看看这两个类是否能在不破坏使用者代码的情况下相互替换。 ####提示: 增加数组长度的方法:使用java.util.Arrays.copyOf()方法,用法请查阅Java API文档。

提示:

这关有两个需要注意的地方:
1.MyDoubleArray类的数组类型依然得是Object类型,不能是Double类型,不然还得报错,但这就是这道出的不好的地方,你只需要对前面一个类的代码修改几下就行了,两个类的区别不大,完全就是重复操作,没意思。
2.clear函数需要把数组的长度重置

源码:

MyList.java

package step1;
//在此写接口MyList

public interface MyList {
    public void add(Object obj);
    public Object get(int index);
    public void clear();
    public boolean isEmpty();
    public int size();
    public int capacity();
}

MyObjectArray.java

package step1;
import java.util.Arrays;
//在此写MyObjectArray类
public class MyObjectArray implements MyList {
    
    private  Object[] list; 
    private int size,incSize;
    
    public MyObjectArray(int incSize) {
        if(incSize<=0) {
            this.incSize=5;
        }else {
            this.incSize=incSize;
        }
        list=new Object[this.incSize];
        size=0;
    }
    
    @Override
    public void add(Object obj) {
        // TODO 自动生成的方法存根
        if(size==list.length) {
            list=Arrays.copyOf(list, list.length+this.incSize);
        }
        list[size++]=obj;    
    }
    
    @Override
    public Object get(int index) {
        // TODO 自动生成的方法存根
        if(index>=0&&index<size) {
            return list[index];
        }else{
            return null;
        }
    }

    @Override
    public void clear() {
        // TODO 自动生成的方法存根
        list=new Object[5];
        size=0;
    }

    @Override
    public boolean isEmpty() {
        // TODO 自动生成的方法存根
        if(size==0) {
            return true;
        }else {
            return false;
        }
    }

    @Override
    public int size() {
        // TODO 自动生成的方法存根
        return size;
    }

    @Override
    public int capacity() {
        // TODO 自动生成的方法存根
        return list.length;
    }
}

MyDoubleArray.java

package step1;
import java.util.Arrays;
//在此写MyDoubleArray类
public class MyDoubleArray implements MyList {

    private  Object[] list; 
    private int size;
    
    public MyDoubleArray(int initSize) {
        if(initSize<=0) {
            initSize=10;
        }
        list=new Object[initSize];
        size=0;
    }
    @Override
    public void add(Object obj) {
        // TODO 自动生成的方法存根
        if(size==list.length) {
            list=Arrays.copyOf(list, list.length*2);
        }
        list[size++]= obj;
    }

    @Override
    public Object get(int index) {
        // TODO 自动生成的方法存根
        if(index>=0&&index<size) {
            return list[index];
        }else{
            return null;
        }
    }

    @Override
    public void clear() {
        // TODO 自动生成的方法存根
        list=new Object[10];
        size=0;
    }

    @Override
    public boolean isEmpty() {
        // TODO 自动生成的方法存根
        if(size==0) {
            return true;
        }else {
            return false;
        }
    }

    @Override
    public int size() {
        // TODO 自动生成的方法存根
        return size;
    }

    @Override
    public int capacity() {
        // TODO 自动生成的方法存根
        return list.length;
    }

}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 舒窈
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信