黑马程序员 java多态

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

Java引用变量有两种类型:一个是编译时的类型,一个是运行时的类型。当两个类型不一致时,就产生了多态

class  DuoTaiDemo 
{        
    public static void function(Cat cat1) 
    { 
        cat1.eat(); 
    } 
    public static void main(String[] args)  
    { 
        function(new Cat()); 
    } 
} 
abstract class Animal 
{ 
    abstract void eat(); 
  
} 
class Cat extends Animal 
{ 
    public void eat() 
    { 
        System.out.println("吃鱼"); 
    } 
} 
class Dog extends Animal 
{ 
    public void eat() 
    { 
        System.out.println("吃骨头"); 
    } 
  
}
/*
如果我们以后想要添加一个猪(pig)的类必须再添加一个方法
我们可以将function方法改为 
    public static void function(Animal animal) 
    { 
        animal.eat(); 
    } 

*/

编写Java程序时,引用变量只能调用它编译时类型的方法,而不能调用运行时的方法。如果需要这个引用变量来调用它运行时类型的方法,则必须把它强制类型转换成运行时类型。

引用类型之间的转换只能把一个父类变量转换成子类类型。没有任何继承关系的类型,则无法进行类型转换。

class DuoTaiDemo2 
{
    public static void main(String[] args) 
    {
        Parent p=new Child();
        p.show();//子类方法一
        ((Child)p).show_1();//子类方法二
    }
}
class Parent
{
    public void show()
    {
        System.out.println("父类方法!");
    }
}
class Child extends Parent
{
    public void show()
    {
        System.out.println("子类方法一!");
    }
    public void show_1()
    {
        System.out.println("子类方法二");
    }
}
  • instanceof运算符

考虑到进行强制转换可能出席那异常,因此进行类型转换之前应先通过instanceof运算符来判断是否可以转换成功

 

if (p instanceof Child)
         {
             Child c=(Child)p;
             c.show_1();
         }

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值