多态基础
package test2;
public class duotai {
public static void main(String []args) {
chicken c=new homechicken();//多态,用大的去接受小的。
tools(c);//如果下面没有instanceof的话,报错,理由同下。
chicken yc=new yechicken();//多态,用大的去接受小的。
tools(yc);//如果下面没有instanceof的话,报错,因为yc不是jianjiaochcken类
chicken jianjiaoChicken=new jianjiaocken();
tools(jianjiaoChicken);
}
public static void tools(chicken ch) {//面向抽象(接口)编程
if(ch instanceof jianjiaocken)//当我们需要把父类实例强制转换为子类引用的时候,为了避免类型转换的异常,
//在转换之前通常用instanceof关键字来做类型转换前的检查判断。
//该语句通常判断一个对象是否为一个类的实例,是返回true,否返回false
//通过的条件:子类本身及其以上的父类--》都可以通过检查,返回ture
{
//注:父类Chicken是有eat方法的,所以可以这么调。实际上传进的是家鸡,那就调用家鸡的eat方法,调用的是野鸡,那就调用野鸡的eat方法
//需要进行显示的类型转换。从高-->低
jianjiaocken jjj=(jianjiaocken)ch;//ch是chicken类型,没有song方法,
//ch.song();//会报错,因为父类chicken中没有song方法,即不能直接在子类中直接调用父类中没有的方法。
jjj.song();//显示转换完就可以了
}
ch.eat();
}
}
abstract class chicken{
String nameString;
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public chicken() {
// TODO Auto-generated constructor stub
}
public chicken(String name) {
this.nameString=name;
}
abstract void eat();
}
class homechicken extends chicken{
public homechicken() {}
public homechicken(String name) {
// TODO Auto-generated constructor stub
super(name);
}
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("家鸡 啊啊啊啊啊 a");
}
}
class yechicken extends chicken{
public yechicken() {}
public yechicken(String name) {
// TODO Auto-generated constructor stub
super(name);
}
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("野鸡鸡 啊啊啊啊啊 a");
}
}
class jianjiaocken extends chicken{
public jianjiaocken() {}
public jianjiaocken(String name) {
// TODO Auto-generated constructor stub
super(name);
}
@Override
void eat() {
// TODO Auto-generated method stub
System.out.println("尖叫鸡鸡 啊啊啊啊啊 a");
}
//注意这里的song方法只有尖椒鸡有,父类没有。
void song() {
System.out.println("尖椒鸡唱歌");
}
}