/**
什么是多态:
对象在运行过程中的多种形态。
多态性我们大概可以分为两类
1.方法的重载与重写
2.对象的多态性
对象的多态性,
对象的多态性是从继承关系中的多个类而来
向上转型,将子类实例化转为父类
格式:父类 父类对象=子类实例:->自动完成
已基本数据类型操作为例:int i='a';
向下转型,将父类实例转为子类实例
格式: 子类 子类对象=(子类)父类实例;强制转换
以基本数据类型操作为实例:char c=char(97);
因为整形是4个字节比char2字节要大,所以需要强制转换
*/
public class duotai{
public static void main(String[] args) {
//类型转换,同类型才能转换,用父类的引用指向子类对象(用大的类型来表示小的类型),自动转换(向上转型)
//HomeChicken hc=new HomeChicken("小鸡鸡");//家鸡属于鸡
Chicken hc=new HomeChicken("小鸡鸡");
// hc.eat();
//YeChicken yc=new YeChicken("大鸡鸡");
Chicken yc=new YeChicken("大鸡鸡");
// yc.eat();
//hc=yc;
// hc.eat();
//eat(hc);
// eat(yc);
Chicken jjc =new JianJiaoChicken("尖叫鸡");
eat(jjc);
eat(hc);
eat(yc);
}
//抽象(粒度),面向抽象编程(面向接口编程)
public static void eat(Chicken c){
System.out.println("鸡吃饭");
c.eat();
//当我们需要把父类的实例强制转换为子类引用时,为了避免类型转换异常, java.lang.ClassCastException
//c.song();不能使用
if(c instanceof JianJiaoChicken){
JianJiaoChicken jjc =(JianJiaoChicken)c;//大的类型转化为小的类型,强制转换(向下转型)
jjc.song();
}
}
}
abstract class Chicken{
private String name;
public Chicken(){}
public Chicken(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public abstract void eat();
}
//家鸡
class HomeChicken extends Chicken{
public HomeChicken(){}
public HomeChicken(String name){
super(name);
}
public void eat(){
System.out.println(this.getName()+",我爱吃米");
}
}
//野鸡
class YeChicken extends Chicken{
public YeChicken(){}
public YeChicken(String name){
super(name);
}
public void eat(){
System.out.println(this.getName()+",我爱吃虫子");
}
}
//尖叫鸡
class JianJiaoChicken extends Chicken{
public JianJiaoChicken(){}
public JianJiaoChicken(String name){
super(name);
}
public void eat(){
System.out.println(this.getName()+",我不吃东西");
}
public void song(){
System.out.println("唧唧复唧唧,我是尖叫鸡");
}
}
Java关于多态的设计、介绍、代码演示,以及instanceof强制类型转换的用法
猜你喜欢
转载自blog.csdn.net/weixin_44117272/article/details/89423526
今日推荐
周排行