軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。同步調用是一種阻塞式調用,調用
方要等待對方執行完畢才返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;異
步調用是一種類似消息或事件的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調
用客戶方的接口)。回調和異步調用的關系非常緊密,通常我們使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。同步調用
是三者當中最簡單的,而回調又常常是異步調用的基礎,因此,下面我們著重討論回調機制在不同軟件架構中的實現。
今天學習時碰到的問題,特總結出來。
Example: Class Teacher and Student are subclass of class Person.
Person p;
Teacher t;
Student s;
p, t and s are all non-null.
if(t instanceof Person) { s = (Student)t; }
What is the result of this sentence?
A. It will construct a Student object.
B. The expression is legal.
C. It is illegal at compilation.
D. It is legal at compilation but possible illegal at runtime.
1z0-147 642-964
instanceof操作符的作用是判斷一個變量是否是右操作數指出的類的一個對象,由于java語言的多態性使得可以用一個子類的實例賦值給一個
父類的變量,而在一些情況下需要判斷變量到底是一個什么類型的對象,這時就可以使用instanceof 了。當左操作數是右操作數指出的類的實
例或者是子類的實例時都返回真,如果是將一個子類的實例賦值給一個父類的變量,用instanceof判斷該變量是否是子類的一個實例時也將返
回真。此題中的if語句的判斷沒有問題,而且將返回真,但是后面的類型轉換是非法的,因為t是一個Teacher對象,它不能被強制轉換為一個
Student對象,即使這兩個類有共同的父類。如果是將t轉換為一個Person對象則可以,而且不需要強制轉換。這個錯誤在編譯時就可以發現,
因此編譯不能通過。