在学习JAVA基础中对上转型对象和接口回调的理解

在我学习的过程中,在接触上转型对象的时候,有点不理解。之后又学到了接口的回调,发现两者之间之间有点类似。随着不断的学习,逐渐的对上转型对象和接口回调有了更深的理解。

上转型对象

上转型对象的概念我就不说了,我来带大家与我一起来理解上转型对象。首先,我们常说,“美国人是人”,“中国人是人”,这是有意的强调人的属性和功能,但是忽略了美国人和中国人独有的属性与功能,从方法的角度上来分析,就是忽略了美国人具有SpeakEnglish()功能或者中国人具有SpeakChinese功能,从人的思维上看,“美国人是人”属于上溯思维方式。

为了形象的理解这个概念,在这里我来举个例子:

   Father  f;
   Son s=new  Son();
   f=Son;

这里的美国人是人的子类,那么我们可以理解f是s的上转型对象。

对象的上转型的对象的实体是子类负责创建,但上转型对象会失去原有对象的一些属性和功能,原有对象的新增方法和新增的变量,上转型对象都是不能调用的,但是上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。上转型对象操作子类继承的方法或子类重写的实例方法,其作用等价与子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,当对象的上转型对象调用这个实例方法时一定是调用了子类重写的实例方法。

public class test {
    public static void main(String[] args) throws java.lang.Exception {
        // TODO Auto-generated method stub
        Father f;
        Son s=new Son();
        f=s;//f是s的上转型对象。        
        f.showAge(12);
        f.loveSport();//上转型对象只能调用子类继承或隐藏的方法。
    }                 
    }
    class Father{
        void showAge(int age){
            System.out.println("我的年龄是:"+age);
        }
        void loveSport(){
            System.out.println("我喜欢跑步");
        }    
    }
    class Son extends Father{
         void showAge(int age){
              System.out.println("我的年龄是s:"+age);
          }
          void language(){
              System.out.println("我说的是英语");
          }
        }

接口回调

在java语言中,接口回调是指,可以把实现某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。

接口回调简单理解就是:类A中调用B类的中方法C,而B又反过去调用A中的方法D,然后D称为A的回调方法。但是这样理解的话会比较绕。但是

interface People{
    void peoplelist();
}
class Student implements People{
    public void peoplelist(){
        System.out.println("i am a student");
    }
    public void otherMethod(){
        System.out.println("这是我这个类实现接口的其他方法,不能被用作接口回调");
    }
}
public class CallbackInterface {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        People a;//声明接口变量
        Student s=new Student();
        a=s;//实例化,接口变量中存放对象的引用
        a.peoplelist();//接口回调        
    }
}

在这个例子中,People接口,由Student类实现,接口创建的对象,与接口类创建的对象的引用赋值给接口创建的对象时,那么接口创建的对象a可以调用接口类中实现接口中的方法peoplelist()。这就是接口回调,但是不能调用其它非接口方法。

学而不思则罔,思而不学则殆

发布了17 篇原创文章 · 获赞 15 · 访问量 1382

猜你喜欢

转载自blog.csdn.net/wuyou1995/article/details/88255598
今日推荐