目录
第2关:定义一个MyList接口,并使用数组的方法来实现接口
第1关:接口练习
任务描述
本关任务:定义一个Animal接口,并按要求实现接口。
要求
-
Animal接口包含三个方法: public void Speak(); //说话 public void Walk(); //行走方式 public String toString();//返回动物名称
-
定义Centipede(蜈蚣)类,实现Animal接口。例如: void Speak();方法显示“不发声” void Walk(); 方法显示“不知道有多少条腿走路” String toString(); 方法返回“蜈蚣”
-
定义Dog(狗)类,实现Animal接口。
-
定义People(人)类,实现Animal接口。
-
定义Chinese(中国人)类,继承People(人)类。
-
定义Britisher(英国人)类,继承People(人)类。
最后设计一个类来测试你的所有的程序,通过该例充分理解接口、继承、多态。
代码
Animal.java
package step2;
//定义Animal接口
interface Animal{
public void Speak();
public void Walk();
public String toString();
}
Centipede.java
package step2;
//完成Centipede类
class Centipede implements Animal{
@Override
public void Speak(){
System.out.print("不发声");
}
@Override
public void Walk(){
System.out.print("不知道有多少条腿走路");
}
@Override
public String toString(){
return "蜈蚣";
}
}
Dog.java
package step2;
//完成Dog类
class Dog implements Animal{
@Override
public void Speak(){
System.out.print("不发声");
}
@Override
public void Walk(){
System.out.print("不知道有多少条腿走路");
}
@Override
public String toString(){
return "狗";
}
}
People.java
package step2;
//完成People类
class People implements Animal{
@Override
public void Speak(){
System.out.print("不发声");
}
@Override
public void Walk(){
System.out.print("不知道有多少条腿走路");
}
@Override
public String toString(){
return "人";
}
}
Chinese.java
package step2;
//完成Chinese类
class Chinese extends People{
@Override
public void Speak(){
System.out.print("不发声");
}
@Override
public void Walk(){
System.out.print("不知道有多少条腿走路");
}
@Override
public String toString(){
return "中国人";
}
}
Britisher.java
package step2;
//完成Britisher类
class Britisher extends People{
@Override
public void Speak(){
System.out.print("不发声");
}
@Override
public void Walk(){
System.out.print("不知道有多少条腿走路");
}
@Override
public String toString(){
return "英国人";
}
}
第2关:定义一个MyList接口,并使用数组的方法来实现接口
任务描述
-
MyList接口包含六个方法: void add(Object obj):往列表尾部添加对象 Object get(int index):从列表中获取索引为i的对象 void clear():清空所有的对象 boolean isEmpty():判断列表中是否有对象 int size():获取列表中对象的个数 int capacity():所分配的空间大小
-
MyObjectArray类实现MyList接口,内部以数组的方式实现,要求: 构造函数MyObjectArray(int incSize):参数incSize为数组初始化大小和空间的增量。若用户调用incSize非法,则设为默认值5。 当调用add()方法往试图往MyObjectArray中增加对象时,如果内部数组已满,则增加数组大小,增量为incSize。 调用clear()方法可以清空所有通过add()方法加入的对象。 调用get(int index)方法时,如果传入的参数非法,则返回null对象,否则返回对应的对象。
-
MyDoubleArray类也实现ReList接口,内部依旧通过数组实现,要求: 构造函数MyDoubleArray(int initSize):参数initSize表示数组的初始化大小。若用户调用initSize非法,则设为默认值10。 当调用add()方法往MyDoubleArray列表里面增加对象时,如果其内部数组已满,则将数组的长度变为当前长度的2倍。 其他方法和MyObjectArray一致
最后设计一个类来测试你的MyObjectArray和MyDoubleArray类,看看这两个类是否能在不破坏使用者代码的情况下相互替换。 ####提示: 增加数组长度的方法:使用java.util.Arrays.copyOf()方法,用法请查阅Java API文档。
代码
MyList.java
package step1;
//在此写接口MyList
public interface MyList{
void add(Object obj);
Object get(int index);
void clear();
boolean isEmpty();
int size();
int capacity();
}
MyObjectArray.java
package step1;
import java.util.Arrays;
//在此写MyObjectArray类
public class MyObjectArray implements MyList
{
private Object[] array = null;
private int cindex = 0;
private int incSize = 0;
public MyObjectArray(int incSize)
{
if(incSize < 0)
{
this.incSize = 5;
}
else{
this.incSize = incSize;
}
this.array = new Object[this.incSize];
}
@Override
public void add(Object obj)
{
if(cindex == array.length)
{
array = Arrays.copyOf(array,array.length + incSize);
}
array[cindex] = obj;
cindex++;
}
@Override
public void clear()
{
this.array = new Object[5];
cindex = 0;
}
@Override
public boolean isEmpty()
{
boolean flag = false;
if(array[0] == null)
{
flag = true;
}
return flag;
}
@Override
public int size()
{
return cindex;
}
@Override
public int capacity()
{
return this.array.length;
}
@Override
public Object get(int index)
{
Object obj = null;
if(index > 0 && index < cindex)
{
obj = this.array[index];
}
return obj;
}
}
MyDoubleArray.java
package step1;
import java.util.Arrays;
//在此写MyDoubleArray类
public class MyDoubleArray implements MyList
{
private Object[] array = null;
private int cindex = 0;
private int initSize = 0;
public MyDoubleArray(){}
public MyDoubleArray(int initSize)
{
if(initSize < 0)
{
this.initSize = 10;
}
else
{
this.initSize = initSize;
}
array = new Object[this.initSize];
}
@Override
public void add(Object obj)
{
if(this.cindex == array.length)
{
array = Arrays.copyOf(array,array.length + array.length);
}
array[cindex] = obj;
cindex++;
}
@Override
public Object get(int index)
{
Object obj = null;
if(index > 0 && index < this.cindex)
{
obj = array[index];
}
return obj;
}
@Override
public void clear()
{
array = new Object[10];
cindex = 0;
}
@Override
public boolean isEmpty()
{
boolean flag = false;
if(array[0] == null)
{
flag = true;
}
return flag;
}
@Override
public int size()
{
return this.cindex;
}
@Override
public int capacity()
{
return this.array.length;
}
}