继承,接口在java环境中的应用

本文通过动物园场景,演示了Java中继承与接口的实际应用。包括动物类及其子类的定义,如老虎、大猩猩、鹦鹉等,并通过接口实现特定表演行为。此外,还涉及管理员类对这些行为的调用。

由于java的继承支持单一继承,不支持多继承,所以在接口的使用在java中要多于继承,现在介绍一个关于继承和接口的综合例题

 请用代码描述:

在动物园每一个动物都有颜色和年龄,都会吃

所有老虎都吃肉,但是有的老虎会表演(钻火圈)

所有的大猩猩都吃香蕉,但有大猩猩会表演(骑自行车)

所有的鹦鹉都吃小米和说话,但是有的鹦鹉会表演(过跷跷板)

    在动物园中管理员有年龄和姓名,他会喂动物和组织会表演的动物进行演出,如果演出时鹦鹉,还会让鹦鹉说你好

 

操作步骤

/*

定义动物类(Animal)

   属性:颜色(color),年龄(age)

  抽象方法: 吃(eat)

  提供: 空参,带参构造;setters和getters方法

 */

publicabstractclass Animal {

// 属性:颜色(color),年龄(age)

   private String color;

   privateintage;

// 抽象方法: 吃(eat)

   publicabstractvoid eat();

// 提供: 空参,带参构造;setters和getters方法

   public Animal() {

      super();

   }

   public Animal(String color, intage) {

      super();

      this.color = color;

      this.age = age;

   }

   public String getColor() {

      returncolor;

   }

   publicvoid setColor(String color) {

      this.color = color;

   }

   publicint getAge() {

      returnage;

   }

   publicvoid setAge(intage) {

      this.age = age;

   }

}

/*

 定义表演者接口(Actor)

   抽象方法: play()

 */

publicinterface Actor {

// 表演

   publicabstractvoid play();

}

/*

 定义老虎类(Tiger),继承动物类(Animal)

   实现抽象方法: 吃(eat)

      输出格式: 2岁的黄色老虎吃肉

   提供: 空参,带参构造;

 */

publicclass Tiger extends Animal  {

//实现抽象方法: 吃(eat)

// 输出格式: 2岁的黄色老虎吃肉

   publicvoid eat(){

      System.out.println(getAge()+"岁的"+getColor()+"老虎吃肉");

   }

//提供: 空参,带参构造;

   public Tiger() {

      super();

   }

   public Tiger(String color, intage) {

      super(color, age);

   }

}

/*

定义会表演的老虎类(ActedTiger),继承老虎类(Tiger),实现表演者接口

   实现抽象方法表演(play)

      输出格式: 2岁的黄色老虎在表演钻火圈

   提供: 空参,带参构造;

 */

publicclass ActedTiger  extends Tiger implements Actor{

//实现抽象方法表演(play)

//    输出格式: 2岁的黄色老虎在表演钻火圈

   publicvoid play(){

      System.out.println(getAge()+"岁的"+getColor()+"老虎在表演钻火圈");

   }

//提供: 空参,带参构造;

   public ActedTiger() {

      super();

   }

   public ActedTiger(String color, intage) {

      super(color, age);

   }

}

/*

 定义大猩猩类(Gorilla),继承动物类(Animal)

   实现抽象方法: 吃(eat)

      输出格式: 3岁的黑色大猩猩吃香蕉

   提供: 空参,带参构造;

 */

publicclass Gorilla extends Animal {

//实现抽象方法: 吃(eat)

// 输出格式: 3岁的黑色大猩猩吃香蕉

   publicvoid eat(){

      System.out.println(getAge()+"岁的"+getColor()+"大猩猩吃香蕉");

   }

//提供: 空参,带参构造;  

   public Gorilla() {

      super();

   }

   public Gorilla(String color, intage) {

      super(color, age);

   }

}

/*

 定义会表演的大猩猩(ActedGorilla),继承大猩猩类(Gorilla),实现表演者接口

   实现抽象方法表演(play)

     输出格式: 3岁的黑色大猩猩在表演骑自行车

   提供: 空参,带参构造;

 */

publicclass ActedGorilla extends Gorilla implements Actor {

//实现抽象方法表演(play)

// 输出格式: 3岁的黑色大猩猩在表演骑自行车

   publicvoid play(){

      System.out.println(getAge()+"岁的"+getColor()+"大猩猩在表演骑自行车");

   }

//提供: 空参,带参构造;

   public ActedGorilla() {

      super();

   }

   public ActedGorilla(String color, intage) {

      super(color, age);

   }

}

 

/*

 定义鹦鹉类(Parrot),继承动物类(Animal)

   实现抽象方法: 吃(eat)

     输出格式: 1岁的绿色鹦鹉在吃小米

   特有方法: 说话(say)

     输出格式: 1岁的绿色鹦鹉在说你好

   提供: 空参,带参构造;

 */

publicclass Parrot extends Animal {

//实现抽象方法: 吃(eat)

// 输出格式: 1岁的绿色鹦鹉在吃小米

   publicvoid eat(){

      System.out.println(getAge()+"岁的"+getColor()+"鹦鹉在吃小米");

   }

//特有方法: 说话(say)

// 输出格式: 1岁的绿色鹦鹉在说你好

   publicvoid say(){

      System.out.println(getAge()+"岁的"+getColor()+"鹦鹉在说你好");

   }

//c)提供: 空参,带参构造; 

   public Parrot() {

      super();

   }

   public Parrot(String color, intage) {

      super(color, age);

   }

}

/*

 定义会会表演的鹦鹉类(ActedParrot),继承鹦鹉类(Parrot),实现表演者接口

   实现抽象方法表演(play)

     输出格式: 1岁的绿色鹦鹉在表演过跷跷板

   提供: 空参,带参构造;

 */

publicclass ActedParrot extends Parrot implements Actor {

//实现抽象方法表演(play)

// 输出格式: 1岁的绿色鹦鹉在表演过跷跷板

   publicvoid play(){

      System.out.println(getAge()+"岁的"+getColor()+"鹦鹉在表演过跷跷板");

   }

//提供: 空参,带参构造;  

   public ActedParrot() {

      super();

   }

   public ActedParrot(String color, intage) {

      super(color, age);

   }

}

/*

 定义动物园管理员类(ZooManager)

   属性:姓名(name),年龄(age)

   行为:

   喂养动物(feed(Animal a)),调用吃的方法;

      请思考此处为什么使用Animal作为参数类型而不是其子类

      在方法内部,调用a对象的eat方法

   组织演出(letItShow(Actor a))

      请思考此处为什么使用Actor接口类型作为参数类型而不是其实现类

      在方法内部

         调用a的play方法

         如果是鹦鹉,把a向下转型为Parrot类型,调用说话方法

   提供空参,有参构造方法与setters和getters方法

 */

publicclass ZooManager {

// 属性:姓名(name),年龄(age)

   private String name;

   privateintage;

// 行为:

// 喂养动物(feed(Animal a)),调用吃的方法;

//    请思考此处为什么使用Animal作为参数类型而不是其子类

//   在方法内部,调用a对象的eat方法

   publicvoid feed(Animal a){

      a.eat();

   }

// 组织演出(letItShow(Actor a))

//    请思考此处为什么使用Actor接口类型作为参数类型而不是其实现类

//    在方法内部

//       调用a的play方法

//       如果是鹦鹉,把a向下转型为Parrot类型,调用说话方法

   publicvoid letItShow(Actor a){

//    调用a的play方法

      a.play();

//    如果是鹦鹉,把a向下转型为Parrot类型,调用说话方法

      if(ainstanceof Parrot){

         Parrot p = (Parrot) a;

         p.say();

      }

   }

// 提供空参,有参构造方法与setters和getters方法

   public ZooManager() {

      super();

   }

   public ZooManager(String name, intage) {

      super();

      this.name = name;

      this.age = age;

   }

  

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicint getAge() {

      returnage;

   }

   publicvoid setAge(intage) {

      this.age = age;

   }

}

/*

定义测试类Test

   提供main方法

   在main方法

      创建会表演的老虎类(ActedTiger)对象t,把颜色赋值为黄色,年龄赋值为2

      创建会表演的大猩猩(ActedGorilla)对象g,把颜色赋值黑色,年龄赋值为3

      创建会表演的鹦鹉类(ActedParrot)对象 p,把颜色赋值为绿色,年龄赋值1

      创建物园管理员类(ZooManager)对象zm,把名称赋值邓超,年龄赋值30

      调用zm对象的喂养动物(feed(Animala))方法,分别传入t,g,p对象

      调用zm对象的组织表演(letItShow(Actora))方法,分别传入t,g,p对象

 */

publicclass Test {

   publicstaticvoid main(String[] args) {

//    创建会表演的老虎类(ActedTiger)对象t,把颜色赋值为黄色,年龄赋值为2

      ActedTiger t = new ActedTiger();

      t.setAge(2);

      t.setColor("黄色");

//   创建会表演的大猩猩(ActedGorilla)对象g,把颜色赋值黑色,年龄赋值为3

      ActedGorilla g = new ActedGorilla();

      g.setAge(3);

      g.setColor("黑色");

//    创建会表演的鹦鹉类(ActedParrot)对象 p,把颜色赋值为绿色,年龄赋值1

      ActedParrot p = new ActedParrot("绿色", 1);

//    创建物园管理员类(ZooManager)对象zm,把名称赋值邓超,年龄赋值30

      ZooManager zm = new ZooManager("邓超", 30);

//    调用zm对象的喂养动物(feed(Animala))方法,分别传入t,g,p对象

      zm.feed(t);

      zm.feed(g);

      zm.feed(p);

//    调用zm对象的组织表演(letItShow(Actora))方法,分别传入t,g,p对象

      zm.letItShow(t);

      zm.letItShow(g);

      zm.letItShow(p);

   }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值