【JAVA】---对象转型

来源:互联网 发布:可以发送数据的仪器 编辑:程序博客网 时间:2024/05/15 09:39
      我自己认为的对象转型其实就是一个父类应用子类新方法的一个手段,看定义感觉挺绕的,所以我决定从例子方面来给大家说明一下,希望可以讲明白!

(一)

咱们先说说向上转型和向下转型的应用,用代码来说明比较简单一点:

public class People{    public void eat(){                System.out.println("人们什么都可以吃!");    }}//河北人继承人,有一个自己的方法studyPublic  class hebeiPeople extends People{     public void eat(){                 System.out.println("河北人不吃猫肉!");     }     Public void study(){                 System.out.println("河北人爱学习!");      }}Public class Test{     public static void main(String args[]){               People p = new  People();               p=new hebeiPeople();//父类的引用指向子类对象,向上转型               p.eat();//可以访问子类和父类的共有方法eat,但是不能访问子类的study       //怎么办呢?      //可以应用强制类型转换,其实也就是向下转型,父类转换成子类的对象,这样就可以掉子类中父类没有的方法了。               hebeiPeople hp =(hebeiPeople) p;               hp.study()     }}



运行后显示:




(二)
     向上转型还可以应用于接口,这便叫做接口回调!具体的接口回调的解释为:可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。

特别的绕口,我反正看不懂!
咱们还是用例子来说明:
//创建一个接口interface Animal{   void jiao(String n);}public class Dog implements Animal{    public void jiao(String n){              System.out.println("狗的叫声是:"+ n);    }}public class Cat implements Animal{    public void jiao(String n){              System.out.println("猫的叫声是:"+ n);    }}public class Test1{     public static void main(String args[]){               Animal a;     //声明一个接口变量               a = new Dog();//实例化,接口变量中有Dod对象的引用               a.jiao("汪汪");//接口回调                           a = new Cat();//实例化,接口变量中有Cat对象的引用               a.jiao("喵喵");//接口回调               }}


运行后为:



小总:

由上面的代码我们可以简单的看出,这三种对象转型其实非常的相似,也非常简单。但是需要我们注意的是:
1、向上转型和回调接口实质上效果是一样的,只不过向上转型还涉及到子类重写父类方法的情形。
2、基类的引用不可以访问子类对象新增成员,要想访问就得向下转型才可以!



0 0