Java多态练习题

Java,多态
定义一个类People
定义两个类Man 和Woman
man有个属性是老婆,有一个方法是lol
woman有个属性是老公,有一个方法是shopping,还有一个方法是生孩子
50%概率是男孩儿,50%概率是女孩儿
生孩子(先判断是否有老公,如果有就创建一个对象,有返回值)
男孩儿就调用lol
女孩就调用shopping

People 类

package com.homework;

// 定义一个People类,做为Man类和Woman类的父类
public class People {
}

Man类

package com.homework;

public class Man extends People{

    // Man类中有个属性是老婆,有个方法是lol
    // 老婆属性
    // 成员属性私有化,封装特性
    private Woman wife;

    // get
    public Woman getWife() {
        return wife;
    }

    // set
    public void setWife(Woman wife) {
        this.wife = wife;
    }

    // 无参构造函数
    public Man() {
    }

    // 全参数构造函数
    public Man(Woman wife) {
        this.wife = wife;
    }

    // 有一个方法是lol
    public void lol(){
        System.out.println("lol");
    }

}

Woman类

package com.homework;

import java.util.Random;

public class Woman extends People {
    // 有一个属性是老公
    // 有一个方法是shopping
    // 有一个方式生孩子

    // 用类做属性
    private Man husband;

    // get
    public Man getHusband() {
        return husband;
    }

    // set
    public void setHusband(Man husband) {
        this.husband = husband;
    }

    // 购物方法
    public void shopping() {
        System.out.println("shopping!");
    }

    // 生孩子方法
    /*
    50%概率是男孩儿,50%概率是女孩儿
    生孩子(先判断是否有老公,如果有就创建一个对象,有返回值)
    男孩儿就调用lol
    女孩就调用shopping
    */

    // ---------------------
    // 多态,父类引用指向子类对象
    // 多态,多态,多态
    // ---------------------
    public People haveBaby() {
        //
        /*
        1.先判断有没有老公 husband == null;
        2.如果条件成立执行生孩子的逻辑;
        3.条件不成立,程序结束返回一个null;
        4.50概率生孩子;

        */

        // 定义一个空的People类型的变量
        People people = new People();
//        if (husband == null) {
//            return null;
//        } else {
        //有老公,随机生成一个新的孩子对象
        if (husband != null) {
            Random random = new Random();// [0,1]
            if (random.nextInt(2) == 0) {
                // 假定 random == 0 是男孩
                people = new Man();

            } else {
                // 假定 random == 1 是女孩
                people = new Woman();
            }
        }
        return people;
    }
}

Test类

package com.homework;

// 定义一个people测试类
public class TestPeople {
    //
    public static void main(String[] args) {
        // 测试生孩子,如果是男孩儿就调用lol,女孩儿就调用shopping

        // 构建一个女士
        Woman woman = new Woman();
        // 构建一个男士
        Man man = new Man();

        // 绑定两个对象的属性关系
        woman.setHusband(man);
        //man.setWife(woman);

        // 向上转型, 把man或者woman类型转换为People类型,在调用子类Man或Woman的方法
        People people = woman.haveBaby();

        if (people == null) {
            System.out.println("请先找老公");
            return;
        } else {
            // 向下转型,子类调用父类的方法
            if (people instanceof Man) {
                Man boy = (Man)people;// 转成Man类型
                boy.lol();
                // man.lol();
            } else if (people instanceof Woman) {
                Woman girl = (Woman)people;// 转成Woman 类型
                girl.shopping();
                //woman.shopping();
            }
        }
    }
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值