package interfacebogs01;
/**
*
* @author Administrator
*接口回调
*接口回调是多态的一种体现,是指:可以把使用的某一接口的类创建的对象的引用赋给声明接口的接口变量中
*那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法
*这一过程叫做接口回调,不同的类在使用同一接口时,可能会产生不同的功能体现,所以接口的方法体不必相同,所以接口回调可能产生不同的行为
*/
interface Computer{ //接口
void print();
}
class student implements Computer{ //继承student
public void print(){
System.out.println("我是一名学生!");
}
}
class teacher implements Computer{//继承teacher
public void print(){
System.out.println("我是一名老师!");
}
}
public class interfacebogs05 {
public static void main(String[] args) {
Computer com; //声明接口的接口变量
com = new teacher();//把使用的teacher类创建的对象的引用赋给声明接口的接口变量
com.print();//接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法
com = new student();
com.print();
}
}
2.
package interfacebogs01;
/**
*
* @author Administrator
*接口作为参数
*当一个方法的函数是一个接口类型时,如果一个类实现了该接口,那么就可以把该类的实例的引用传值给该方法,参数可以回调实现的接口方法
*/
interface Show{
void show();
}
class A implements Show{
public void show(){
System.out.println("我是A");
}
}
class B implements Show{
public void show(){
System.out.println("我是B");
}
}
class C{
public void g(Show s){//接口作为参数
s.show(); //show方法是现在将自己类创建的对象 的方法
}
}
public class interfacebogs06 {
public static void main(String[] args) {
C c = new C();
c.g(new A());//接口回调
c.g(new B());
}
}
3.
向上转型对象和接口回调的区别
从实现了某接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。
这些对象都可以调用基类型提供的方法,对于接口来说就是回调接口中的方法,对于父类来说就是调用父类的方法。
当然在向上转型的情况下,还牵涉到子类重写 父类方法的情形。
向上转型是把子类当做父类用。
使父类可以调用子类重写过的方法。
如:
class Sp{
public void sayHi(){
Systemout.println( "Sp hi~ ");
}
}
class S1 extends Sp{
public void sayHi(){
Systemout.println( "S1 hi~ ");
}
}
class S2 extends Sp{
public void sayHi(){
Systemout.println( "S2 hi~ ");
}
}
public class Test{
public static void main(String[] args){
Sp sp = new Sp();
Sp sp1 = new S1();//这就是向上转型
Sp sp2 = new S2();//这就是向上转型
sp.sayHi();
sp1.sayHi();//sp1与sp2都是 Sp类型的,可是却可以有不同的输出
sp2.sayHi();
}
}
/**
*
* @author Administrator
*接口回调
*接口回调是多态的一种体现,是指:可以把使用的某一接口的类创建的对象的引用赋给声明接口的接口变量中
*那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法
*这一过程叫做接口回调,不同的类在使用同一接口时,可能会产生不同的功能体现,所以接口的方法体不必相同,所以接口回调可能产生不同的行为
*/
interface Computer{ //接口
void print();
}
class student implements Computer{ //继承student
public void print(){
System.out.println("我是一名学生!");
}
}
class teacher implements Computer{//继承teacher
public void print(){
System.out.println("我是一名老师!");
}
}
public class interfacebogs05 {
public static void main(String[] args) {
Computer com; //声明接口的接口变量
com = new teacher();//把使用的teacher类创建的对象的引用赋给声明接口的接口变量
com.print();//接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法
com = new student();
com.print();
}
}
2.
package interfacebogs01;
/**
*
* @author Administrator
*接口作为参数
*当一个方法的函数是一个接口类型时,如果一个类实现了该接口,那么就可以把该类的实例的引用传值给该方法,参数可以回调实现的接口方法
*/
interface Show{
void show();
}
class A implements Show{
public void show(){
System.out.println("我是A");
}
}
class B implements Show{
public void show(){
System.out.println("我是B");
}
}
class C{
public void g(Show s){//接口作为参数
s.show(); //show方法是现在将自己类创建的对象 的方法
}
}
public class interfacebogs06 {
public static void main(String[] args) {
C c = new C();
c.g(new A());//接口回调
c.g(new B());
}
}
3.
向上转型对象和接口回调的区别
从实现了某接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的。
这些对象都可以调用基类型提供的方法,对于接口来说就是回调接口中的方法,对于父类来说就是调用父类的方法。
当然在向上转型的情况下,还牵涉到子类重写 父类方法的情形。
向上转型是把子类当做父类用。
使父类可以调用子类重写过的方法。
如:
class Sp{
public void sayHi(){
Systemout.println( "Sp hi~ ");
}
}
class S1 extends Sp{
public void sayHi(){
Systemout.println( "S1 hi~ ");
}
}
class S2 extends Sp{
public void sayHi(){
Systemout.println( "S2 hi~ ");
}
}
public class Test{
public static void main(String[] args){
Sp sp = new Sp();
Sp sp1 = new S1();//这就是向上转型
Sp sp2 = new S2();//这就是向上转型
sp.sayHi();
sp1.sayHi();//sp1与sp2都是 Sp类型的,可是却可以有不同的输出
sp2.sayHi();
}
}