接口回调和向上转型

抄别人的,但为了自己掌握更加的踏实,所以复制到这里,拜谢原创!http://blog.csdn.net/u014025369/article/details/24707525

接口回调是指:可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。
interface People { 
    void peopleList(); 

  
class Student implements People { 
    publicvoid peopleList() { 
       System.out.println("I’m a student."); 
    } 

  
class Teacher implements People { 
    publicvoid peopleList() { 
       System.out.println("I’m a teacher."); 
    } 

  
publicclass Example { 
    publicstaticvoid main(String args[]) { 
       People a; // 声明接口变量 
       a = new Student(); // 实例化,接口变量中存放对象的引用 
       a.peopleList(); // 接口回调 
       a = new Teacher(); // 实例化,接口变量中存放对象的引用 
       a.peopleList(); // 接口回调 
    } 
}

I’m a student.
I’m a teacher.
再来看看向上转型(upcasting)的概念。

2.什么是向上转型?

Shape s=new Circle();

这里,创建了一个Circle对象,并把得到的引用立即赋值给Shape。通过继承,Circle就是一种Shape。
假设你调用基类方法(它已在导出类中被覆盖):
s.draw();

由于后期绑定(多态),将会正确调用Circle.draw()方法。
3.Java中的跨类引用
在java里面,关于跨类引用,有两条规则应该记住:
1)如果a是类A的一个引用,那么,a可以指向类A的一个实例。或者说指向类A的一个子类,这是向上转型的情形。
2)如果a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。这是接口回调的情形。
在java里面,向上转型是自动进行的,但是向下转型却不是,

需要我们自己定义强制进行.
class B extends A{} 
  
publicclass A { 
    publicstaticvoid main(String[] argts){ 
       A a1=new A(); 
       A a2=new B();//Upcasting向上转型 
       B b1=new B(); 
       B b2=(B) new A();//DownCasting向下转型,[注意]:此处(B)进行了强制转换! 
    } 
}

4.向上转型与接口回调的区别
从实现了某接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。这些对象都可以调用基类型提供的方法,对于接口来说就是回调接口中的方法,对于父类来说就是调用父类的方法。当然在向上转型的情况下,还牵涉到子类重写(Override)父类方法的情形。

个人理解,向下转型用的特别少,可能是因为java机制的原因,但作为初学者,接口回调的概念还是很抽象的,直到用到代理模式的时候才悄然大悟,再次感谢作者!

时间: 2024-10-31 22:15:11

接口回调和向上转型的相关文章

Java中的接口回调

接口回调是多态的另一种体现.接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法.当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调.不同的类在使用同一接口时,可能具有不同的功能体现.即接口的方法体不必相同,因此接口回调可能产生不同的行为. 接口回调会方便功能的扩展,在主功能外由框架层实现定制功能处理. 现在有两个类,一个是A,一个是B,回调就是A去调用B中的某个方法,然后B又回调A中

18、內部类向上转型为接口

package com.lei.duixiang; /** * 內部类向上转型为接口 * 1.非内部类不能被声明为 private 或 protected 访问类型 * 2.从执行结果可以看出,这条语句执行的是内部类中的f() 方法 * 很好地对继承该类的子类隐藏了实现细节,仅为编写子类的人留下一个接口和一个外部类 * 同时也可以调用f() 方法,但是 f()方法的具体实现过程却很好的被隐藏了,这是内部类最基本的用途 * @author Administrator * */ interface

接口回调

二者实质上效果是一样的. 1.接口回调是什么[2]? 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法.实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调.看下面示例. interface People { void peopleList(); } class Student implements People { public void peopleList(

java向上转型和向下转型

一直不太明白这个概念,于是在网上搜索了一下文章转载自:http://www.cnblogs.com/fickleness/p/3149011.html 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 向下转型:父类引用的对象转换为子类类型称为向下转型. 前者

Java转型(向上转型和向下转型)

在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念"人".再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.

重新认识java(五) ---- 面向对象之多态(向上转型与向下转型)

多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢?如果你看到这篇文章的名字,脑海中对多态没有一个清晰的概念,不妨点进来看看,也许会有收获. 什么是多态 简单的理解多态 多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力.比如说,有一杯水,我不知道它是温的.冰的还是烫的,但是我一摸我就知道了.我摸水杯这个动作,对于不同温度的水,就会得到不同的结果.这就是多态. 那么,java中是怎么体现多态呢?我们来直接看代码: public class Water { pu

【JAVA】关于向上转型与向下转型

向上转型: 子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 1 public class Animal { 2 public void eat(){ 3 System.out.println("Animal eat!"); 4 } 5 } 6 7 class Bird extends Animal{ 8 public void eat(){ 9 System.out.println("Bird eat!");

Java向上转型注意事项

继承.接口:Java子类中如果含有父类中不包含的变量与方法,子类对象向上转型时就是丢失这些变量和方法. 1 interface SuperClass{ 2 int i = 2; 3 void f() ; 4 } 5 class SubClass implements SuperClass{ 6 int i = 1 ; 7 int j = 2 ; 8 public void f(){ 9 System.out.println("SubClass.f()"); 10 } 11 public

java的向上转型总结

在<think of java>中对'向上转型'有着如下的描述 看完之后很蒙圈,所以自己在网上找了一些描述,并自己做了简单的总结 简单的例子 class A{ public void A1(){ System.out.println("父类方法1"); }public void A2() { System.out.println("父类方法2"); }} class B extends A{ public void A1() { System.out.p