java:面向对象测试

javaOOP面向对象 基础测试:一定要按照步骤编写

(一)在base包中

   编写动物(Animal)接口,定义抽象方法
   eat(),sleep(),show()
   

package base;

public interface Animal 
{
    public void eat();
    public void sleep();
    public void show();
}

   定义一个抽象类 哺乳动物 Mammal,实现Animal接口(但是暂不实现它的三个抽象方法),在这个抽象类中增加milk吃奶的抽象方法

package base;

public abstract class Mammal implements Animal 
{
    public abstract void milk();
}

   
   定义一个抽象类 爬行动物 Reptile ,实现Animal接口(但是暂不实现它的三个抽象方法),在这个抽象类中增加crawl 爬行的抽象方法。

package base;

public abstract class Reptile implements Animal 
{
    public abstract void crawl();
}

(二)在utility包中

   定义 Person,Monkey,Cat,Dog,继承Mammal,实现其所有方法,每个类中定义两个属性,提供两个构造函数,提供打印输出的方法show(),输出动物的属性;
Person

package utility;

import base.Mammal;

public class Person extends Mammal 
{
    int age;
    int height;


    public Person()
    {

    }

    public Person(int age,int height)
    {
        this.age=age;
        this.height=height;
    }


    public void eat() 
    {
        System.out.println("Person eat");
    }

    public void sleep() 
    {
        System.out.println("Person sleep");
    }

    public void show() 
    {
        System.out.println("i am Person"+ " AND "+ "im "+ age + "years old"+ " AND im " + height +"tall" );
    }

    public void milk() 
    {
        System.out.println("Person eat milks");
    }

}

Monkey

package utility;

import base.Mammal;

public class Monkey extends Mammal 
{
    int age;
    int height;


    public Monkey()
    {

    }

    public Monkey(int age,int height)
    {
        this.age=age;
        this.height=height;
    }

    public void eat() 
    {
        System.out.println("Monkey eat");
    }

    public void sleep() 
    {
        System.out.println("Monkey sleep");
    }

    public void show() 
    {
        System.out.println("i am Monkey"+ " AND "+ "im "+ age + "years old"+ " AND im " + height +"tall" );
    }

    public void milk() 
    {
        System.out.println("Monkey eat milks");
    }

}

Cat

package utility;

import base.Mammal;

public class Cat extends Mammal 
{
    int age;
    int height;


    public Cat()
    {

    }

    public Cat(int age,int height)
    {
        this.age=age;
        this.height=height;
    }

    public void eat() 
    {
        System.out.println("Cat eat");
    }

    public void sleep() 
    {
        System.out.println("Cat sleep");
    }

    public void show() 
    {
        System.out.println("i am Cat"+ " AND "+ "im "+ age + "years old"+ " AND im " + height +"tall" );
    }

    public void milk() 
    {
        System.out.println("Cat eat milks");
    }

}

Dog

package utility;

import base.Mammal;

public class Dog extends Mammal 
{
    int age;
    int height;


    public Dog()
    {

    }

    public Dog(int age,int height)
    {
        this.age=age;
        this.height=height;
    }


    public void eat() 
    {
        System.out.println("Dog eat");
    }

    public void sleep() 
    {
        System.out.println("Dog sleep");
    }

    public void show() 
    {
        System.out.println("i am Dog"+ " AND "+ "im "+ age + "years old"+ " AND im " + height +"tall" );
    }

    public void milk() 
    {
        System.out.println("Dog eat milks");
    }
}

   定义 Snake,Crocodile,继承Reptile,实现其所有方法,每个类中定义两个属性,提供两个构造函数。提供打印输出的方法show(),输出动物的属性。

Snake

package utility;

import base.Reptile;

public class Snake extends Reptile 
{
    int age;
    int height;


    public Snake()
    {

    }

    public Snake(int age,int height)
    {
        this.age=age;
        this.height=height;
    }

    public void eat() 
    {
        System.out.println("Snake eat");
    }

    public void sleep() 
    {
        System.out.println("Snake sleep");
    }

    public void show() 
    {
        System.out.println("i am Snake"+ " AND "+ "im "+ age + "years old"+ " AND im " + height +"tall" );
    }

    public void crawl() 
    {
        System.out.println("Snake crwal");
    }

}

Crocodile

package utility;

import base.Reptile;

public class Crocodile extends Reptile 
{

    int age;
    int height;


    public Crocodile()
    {

    }

    public Crocodile(int age,int height)
    {
        this.age=age;
        this.height=height;
    }


    public void eat() 
    {
        System.out.println("Crocodile eat");
    }

    public void sleep() 
    {
        System.out.println("Crocodile sleep");
    }

    public void show() 
    {
        System.out.println("i am Crocodile"+ " AND "+ "im "+ age + "years old"+ " AND im " + height +"tall" );
    }

    public void crawl() 
    {
        System.out.println("Crocodile crwal");
    }


}

(三)在javastudy包中,定义一个类Test1,

   定义一个长度为6的Animal数组,分别存放以上的每一种动物,循环取出每个动物,调用其方法。要求所有方法都要被调用到【eat,sleep,show,milk,crawl】,其中要用到instanceof,把代码写到精简。
   
   阅读以下以下文档,了解instanceof 关键字的用法,在循环中进行类型转换,调用Mammal和Reptile特有的方法。
   
instanceof的用法请参照下面的文档【参考文档:(一定要看)】
http://rodney.cnblogs.com/archive/2005/08/18/instanceof.html

http://blog.csdn.net/jal198958/article/details/8251465

主函数写法

package javastudy;

import base.Animal;
import base.Mammal;
import base.Reptile;
import utility.Cat;
import utility.Crocodile;
import utility.Dog;
import utility.Monkey;
import utility.Person;
import utility.Snake;

public class Test1 
{

    public static void main(String[] args) 
    {
        //定义数组并装入装入6个对象
        Animal a[]=new Animal[6];
        a[0]=new Person(1,1);
        a[1]=new Monkey(2,2);
        a[2]=new Cat(3,3);
        a[3]=new Dog(4,4);
        a[4]=new Snake(5,5);
        a[5]=new Crocodile(6,6);



        //循环取出每个动物并调用其方法,所有方法都eat,sleep,show,milk
        for(int i=0;i<6;i++)
        {   
            a[i].eat();
            a[i].sleep();
            a[i].show();
            if(a[i] instanceof Mammal)
            {
                Mammal b=(Mammal)a[i];
                b.milk();

            }else
            {
                Reptile b=(Reptile)a[i];
                b.crawl();
            }
        }

    }
}

最后总结提示一下课程中没有讲到的内容
Animal作为一个接口,两个抽象类Mammal和Reptile继承于Animal,
然后4个类Person,Monkey,Cat,Dog继承与Mammal
2个类继承于Reptile,分别是Snake,Crocodile

第一点Animal a[]=new Animal[6],所有的a[]都是Animal,也就是最大的父类,我们知道抽象类是不能实例化的,但是为什么能够这么写?
那么很明显,不能实例化指的是不能作为构造函数
也就是不能这么写:这里写图片描述

第二点拿Mammal来说,
我们回到instanceof的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。
我们知道子类有6个,父类有2个,父类的父类有1个,最后一题要求强制类型转换,我们特定的方法是定义在父类里,如果Dog只是Dog的实例,而不是Mammal的实例也不是Animal的实例,那将是一件非常痛苦的事情,这意味着我们要写6个if,如果a instanceof Mammal,我们只要写两个if,那我们的代码将会非常好看,接下来我们做个试验,看看下面三个的输出结果

System.out.println(a instanceof Dog);
System.out.println(a instanceof Mammal);
System.out.println(a instanceof Animal);

完整程序如下

package javastudy;


import base.Animal;
import base.Mammal;
import utility.Dog;

public class TestIt 
{

    public static void main(String[] args) 
    {
        Animal a=new Dog();
        System.out.println(a instanceof Dog);
        System.out.println(a instanceof Mammal);
        System.out.println(a instanceof Animal);
    }
}

结果如下

true
true
true

这两句话的输出结果都是true,也就是说Dog即是Dog实例化的,也是他的父类,和父类的父类的实例化。
这样我们的变成就很好解决了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值