接口的使用方法和向上转型对象的区别

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(); 


    } 
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值