十一,多态

章节目录

标题链接
一,Java概述与Java基础http://t.csdnimg.cn/EBd3W
二,Java程序流程http://t.csdnimg.cn/k6p9l
三,Java数组http://t.csdnimg.cn/ABfr1
四,Java字符串http://t.csdnimg.cn/TrKjL
五,类和对象基础http://t.csdnimg.cn/6HRem
六,构造方法http://t.csdnimg.cn/M4gTk
七,this关键字和static关键字http://t.csdnimg.cn/wzVJs
八,类的继承http://t.csdnimg.cn/WOKIh
九,实践课堂练习http://t.csdnimg.cn/k9iix
十,封装课堂练习http://t.csdnimg.cn/oYl68
十一,多态http://t.csdnimg.cn/gFhx8
十二,抽象类http://t.csdnimg.cn/pYKtx
十三,实现接口http://t.csdnimg.cn/vXK3v

多态

一. 单选题(共8题,40分)

1. (单选题, 5分)对象多态性是程序中的某种现象,这种现象是( )。

A. 显示同一对象的不同字段成员,会得到不同的显示结果
B. 调用同一对象的不同方法成员,会得到不同的处理结果
C. 显示不同对象的同名字段成员,会得到不同的显示结果
D. 调用不同对象的同名方法成员,会得到不同的处理结果

正确答案: D:调用不同对象的同名方法成员,会得到不同的处理结果;

2. (单选题, 5分)Java语言重点关注的对象多态性形式是( )。

A. 同类多个对象之间的多态
B. 同一类族不同对象之间的多态
C. 不同组合类对象之间的多态
D. 组合类对象和包装类对象之间的多态

B:同一类族不同对象之间的多态;

3. (单选题, 5分)下列关于对象替换与多态的描述中,错误的是( )。

A. 对象替换与多态的目的是提高程序中算法代码的重用性
B. 对象替换与多态的基础是子类与超类之间具有相似性
C. 通过类的继承与扩展可以实现类代码的重用
D. 通过对象替换与多态可以实现类代码的重用

正确答案: D:通过对象替换与多态可以实现类代码的重用;

4. (单选题, 5分)下列关于对象替换语法规则的描述中,错误的是( )。

A. 可以将子类对象的引用赋值给超类的引用变量
B. 超类的引用变量可以引用子类对象
C. 可以将超类的引用变量直接赋值给子类的引用变量
D. 可以将超类的引用变量赋值给子类的引用变量,赋值时必须进行强制类型转换

正确答案: C:可以将超类的引用变量直接赋值给子类的引用变量;

5. (单选题, 5分)下列关于对象多态语法规则的描述中,错误的是( )。

A. 通过超类引用变量访问子类对象的成员,只能访问其中超类定义过的成员
B. 通过超类引用变量访问子类对象的成员,不能访问其中新添加的成员
C. 如果子类重写了超类成员,通过超类引用变量所访问到的是重写前的老成员
D. 如果子类重写了超类成员,通过超类引用变量所访问到的是重写后的新成员

正确答案: C:如果子类重写了超类成员,通过超类引用变量所访问到的是重写前的老成员;

6. (单选题, 5分)定义如下的超类A和子类B:

dass A{
public void fun(){…}//代码省略
}
class B extends A {
public void fun(){…}//重写fun(),代码省略

}
按如下形式创建一个子类B的对象,然后调用其方法成员fun( ):
B b = new B(): b.fun( ):

上述调用方法成员fun()的执行过程是()。

A. 执行类A定义的fun( )
B. 先执行类A定义的fun(),再执行类B重写的fun()
C. 执行类B重写的fun()
D. 先执行类B重写的fun(),再执行类A定义的fun

正确答案: C:执行类B重写的fun();

7. (单选题, 5分)使用第6题中的超类A和子类B,按如下形式创建一个子类B的对象,然后调用其方法成员fun():

A a = new B(): a.fun) );
上述调用方法成员fun( )的执行过程是( )。

A. 执行类A定义的fun()
B. 先执行类A定义的fun(),再执行类B重写的fun()
C. 执行类B重写的fun()
D. 先执行类B重写的fun(),再执行类A定义的fun()

正确答案: C:执行类B重写的fun();

8. (单选题, 5分)定义如下的超类A和子类B

class A {
public void fun(){…} //代码省略
}
class B extends A{
public void fun(){…} //重写fun(),代码省略
public void fun1(){…} //新添加fun1(),代码省略
按如下形式创建两个子类B的对象,然后分别访问其下级成员
A a = new B(): B b = new B();//创建对象
a.fun();a.fun1();b.fun();b.fun1();//访问对象的下级成员

上述访问对象下级成员的语句中,错误的是( )。

A. a.fun( ):
B. a.fun1( );
C. b.fun( );
D. b.funl( );

正确答案: B:a.fun1( );;

二. 简答题(共1题,60分)

9. (简答题, 60分)

(1)编写水果父类Fruits,包含如下成员变量和方法:

① String类型的表示水果名的成员变量 name

② 无参的构造方法,方法体内无代码。

③ 指定姓名 name 的构造方法

④ 成员变量 name 的 get 和set 方法

⑤ 如何吃的方法eat(), 该方法在控制台输出“每种水果有不同的吃法”

(2)由Fruits类派生香蕉子类Banana,该类如下:

① 增加String类型的代表水果颜色的成员变量 color。

② 增加布尔型boolean的表示水果是否成熟 的成员变量 ripe。

③ 无参的构造方法: 水果名字name 设为Banana, color 为 yellow, ripe为 true

④ 指定颜色color和是否成熟 ripe 的构造方法: 调用父类的指定水果名的构造函数,水果名字为Banana

⑤ 成员变量color的get 和 set方法

⑥ 成员变量 ripe的 get和set方法

⑦ 重写eat方法,输出“香蕉可以扒皮直接吃,也可榨汁等”

⑧ 重写toString()方法: 返回水果名字 name 、颜色 color 和是否成熟 ripe的值组成的字符串。

(3)编写测试程序:

① 在 Banana类中编写主方法 main , 该方法实现以下功能:

② 创建一个Fruits 类对象 fruits, 水果名是 “Anyone”.

③ 调用该对象的eat方法。

④ 创建一个Banana类对象ripeBanana代表熟了的香蕉, 颜色为yellow, ripe为true

⑤ 通过调用该对象的 toString方法在控制台输出水果相关信息。

⑥ 调用该对象的 eat方法。

提交程序和运行截图,需注意编码规范。

我的答案:


class Fruits {
    String name;

    //无参
    Fruits() {

    }

    //name
    Fruits(String name) {
        this.name = name;
    }

    //获取
    String getName() {
        return name;
    }

    //设置
    void setName(String name) {
        this.name = name;
    }

    //吃的方法
    void eat() {
        System.out.println("每种水果有不同的吃法");
    }

}

//香蕉子类Banana
class Banana extends Fruits {
    String color;
    boolean ripe;

    Banana() {
        super("Banana");
        this.color = "yellow";
        this.ripe = true;
    }

    //指定颜色和是否成熟的构造方法
    Banana(String color, boolean ripe) {
        super("Banana");
        this.color = color;
        this.ripe = ripe;
    }

    //get
    String getColor() {
        return color;
    }

    //set
    void setColor(String color) {
        this.color = color;
    }

    //is或get
    boolean getRipe() {
        return ripe;
    }

    //set
    void setRipe(boolean ripe) {
        this.ripe = ripe;
    }

    @Override
    void eat() {
        System.out.println("香蕉可以扒皮直接吃,也可榨汁等");
    }

    @Override
    public String toString() {
        return "Fruit name:" + getName() + ", Color:" + color + ",Ripe:" + ripe;
    }

    //方法
    public static void main(String[] args) {
        Fruits fruits = new Fruits("Anyone");
        fruits.eat();

        Banana ripeBanana = new Banana("yellow", true);
        System.out.println(ripeBanana.toString());
        ripeBanana.eat();
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值