public class Test01{
public static void main(String[] args){
/*
GoodBoy b = new GoodBoy();//可以使用下面的
*/
//用父类的引用Boy指向子类对象GoodBoy
Boy b = new GoodBoy();//自动向上转型
b.say();
//GoodBoy gb = (GoodBoy)b;//向下转型(把父类引用转换为子类对象)
//有可能发生类型转换异常
/*
GoodBoy gb = (GoodBoy)b;有可能报错,为了防止,需要用到instanceof
instanceof 检查对象是否为某个类型
*/
if(b instanceof GoodBoy){
GoodBoy gb = (GoodBoy)b;
}
print(b);
}
public static void print(Boy boy){
boy.say();
//代码针对boy来写,不确定是GoodBoy还是BadBoy,在调用print(boy),这个例子对应的是Goodboy
//这就是多态性
//如果下面再有OkBoy、Yesboy、WhatBoy,这个方法也同样适用
//这就是多态性
//对修改关闭,对扩展开放
}
}
class BadBoy extends Boy{
public void say(){
System.out.println("no~no~no~");
}
}
class GoodBoy extends Boy{
public void say(){
System.out.println("yes~yes~yes~");
}
}
abstract class Boy{
public String name;
public String getName(){
return name;
}
public void setName(){
this.name = name;
}
public abstract void say();
}