PTA-6-48 使用面向对象的思想编写程序描述动物

题目:

使用面向对象的思想编写程序描述动物,说明:

(1) 分析兔子和青蛙的共性,定义抽象的动物类,拥有一些动物共有的属性:名字、颜色、类别(哺乳类、非哺乳类),以及共有的行为:吃东西,发出叫声。

(2)定义一些特殊能力做为接口,例如游泳,飞翔。

(3)定义三种动物:兔子继承动物类;根据青蛙会游泳,因此继承动物同时实现游泳接口;老鹰会飞,因此继承动物同时实现飞翔接口。

(4)设计测试类,调用子类所覆写的这些抽象方法。

已有的抽象类定义如下:

abstract class Animal{   //动物类
    private String name;//名字
    private String color;//颜色
    private String type;//类别(哺乳类、非哺乳类) 
    public Animal(String name, String color, String type){       
        this.name = name;
        this.color = color;
        this.type = type;
    }
    public String getName(){
        return name;
    }  
    public String getColor(){
        return color;
    }   
    public String getType(){
        return type;
    }     
    public abstract void shout();   
    public abstract void eat();
}

需要编写两个接口体现特殊能力:

(1)定义一个游泳的接口Swimmable,在此接口中有抽象方法swim()。

(2)定义一个游泳的接口Flyable,在此接口中有抽象方法fly()。

需要编写三个子类兔子、青蛙和老鹰:

(1) 定义一个子类Rabbit,兔子不会飞也不会游泳,继承动物类,并覆写shout()和eat()方法。

(2) 定义一个子类Frog,青蛙不会飞但会游泳,继承动物类并实现接口Swimmable,并覆写shout()、eat()方法和swim()方法。

(3) 定义一个子类Eagle,老鹰会飞但不会游泳,继承动物类并实现接口Flyable,并覆写shout()、eat()方法和fly()方法。

已有的Main类定义

/* 请在这里填写答案 */

public class Main{
    public static void main(String[] args) {
        AnimalAction(new Rabbit("小白", "白色", "哺乳类"));      
        System.out.println("====================");
        AnimalAction(new Frog("弗洛格", "绿色", "非哺乳类"));
        SwimAction(new Frog("弗洛格", "绿色", "非哺乳类"));
        System.out.println("====================");
        AnimalAction(new Eagle("凤头鹰","灰色","非哺乳类"));
        FlyAction(new Eagle("凤头鹰","灰色","非哺乳类"));
    }
    public static void AnimalAction(Animal an) {
        an.shout();
        an.eat();
    }
    public static void SwimAction(Swimmable s) {
        s.swim();
    }
    public static void FlyAction(Flyable f) {
        f.fly();
    }
}


根据题目要求,代码实现如下:

interface Swimmable {
    abstract void swim();
}

interface Flyable {
    abstract void fly();
}
class Rabbit extends Animal {
    public Rabbit(String name, String color, String type) {
        super(name, color, type);
    }
    @Override
    public void shout() {
        System.out.println("那只"+super.getColor()+"的,名字叫"+super.getName()
            +"的兔子正在叽叽的叫");
    }
    @Override
    public void eat() {
        System.out.println("兔子是哺乳类,爱吃胡萝卜");
    }
}

class Frog extends Animal implements Swimmable {
    public Frog(String name, String color, String type) {
        super(name, color, type);
    }
    @Override
    public void shout() {
        System.out.println("那只"+super.getColor()+"的,名字叫"+super.getName()
                +"的青蛙正在呱呱的叫");
    }
    @Override
    public void eat() {
        System.out.println("青蛙是非哺乳类,爱吃昆虫");
    }

    @Override
    public void swim() {
        System.out.println("青蛙是游泳高手");
    }
}
class Eagle extends Animal implements Flyable {
    public Eagle(String name, String color, String type) {
        super(name, color, type);
    }
    @Override
    public void shout() {
        System.out.println("那只"+super.getColor()+"的,名字叫"+super.getName()
                +"的老鹰正在啾啾的叫");
    }
    @Override
    public void eat() {
        System.out.println("老鹰是非哺乳类,爱吃小鸡");
    }

    @Override
    public void fly() {
        System.out.println("老鹰是飞翔高手");
    }
}

以上就是 PTA-6-48 使用面向对象的思想编写程序描述动物 的全部内容了,希望能对你有所帮助!

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 什么是封装性? 封装性是指将的实现细节隐藏起来,不允许外部直接访问和修改的内部数据,而是通过提供公共的接口方法来进行操作。这样可以保证的内部实现不会被外部错误的修改,提高了代码的安全性和可维护性。 2. 如何实现封装性? 在Java中,可以通过访问修饰符来实现封装性。Java提供了三种访问修饰符:public、protected和private。 public修饰的成员变量和方法可以被任何、任何包中的代码访问。 protected修饰的成员变量和方法可以被同一个包中的代码以及其他包中的子访问。 private修饰的成员变量和方法只能在的内部访问,其他无法访问。 通过合理地使用访问修饰符,可以控制的访问权限,实现封装性。 3. 封装性的优点是什么? 封装性的优点包括: (1) 提高代码的安全性,防止外部访问和修改的内部数据。 (2) 提高代码的可维护性,内部数据的修改只需要在的内部进行,不会影响到外部。 (3) 提高代码的可重用性,外部只需要使用公共的接口方法进行操作,不需要了解的内部实现细节。 (4) 提高代码的可扩展性,可以在不修改的内部实现的情况下,通过添加新的接口方法来扩展的功能。 4. 封装性的具体实现方法有哪些? 封装性的具体实现方法包括: (1) 将成员变量声明为private,通过公共的访问方法来进行访问和修改。 (2) 提供公共的访问方法,包括get和set方法,用于获取和设置成员变量的值。 (3) 在访问方法中添加必要的逻辑判断,例如参数的合法性检查、权限的检查等。 (4) 将的内部实现细节隐藏起来,不暴露给外部。 (5) 合理使用访问修饰符,控制的访问权限。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值