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();
}
}
}
}