1. 程式人生 > >百度面試經驗2-android開發工程師

百度面試經驗2-android開發工程師

        我週六又不自量力的去了百度移動雲事業部的專場招聘會,我知道我沒戲,但是這畢竟是機會。排隊三個多小時,最後在泱泱人海中,終於求的這幾道面試題。與大家共勉之。

1,面向物件概念中,過載和重寫的區別是什麼?

一、重寫(override)

override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。

重寫(覆蓋)的規則:

   1、重寫方法的引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.

   2、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private

)。

   3、重寫的方法的返回值必須和被重寫的方法的返回一致;

   4、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;

   5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒s有對其進行重寫。

   6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。

View Code 複製程式碼
override就是子類將父類的方法重新實現了一遍。
new就是說這個方法就是子類自己的,跟父類沒有任何繼承關係關係,僅僅是重名 

    public class A
    {
        public virtual string Function()
        {
            return
"1"; } } public class B : A { public override string Function() { return "2"; } } public class C : A { public new string Function() { return "3"; } } public class JustForTest { public
void DoTest() { B b = new B(); C c = new C(); Console.WriteLine(b.Function()); Console.WriteLine(c.Function()); Console.WriteLine((b as A).Function());//這兩個就體現出來了,B還是呼叫自己,返回2 Console.WriteLine((c as A).Function());//C呼叫的是基類,返回0 } }
複製程式碼

 二、overload是過載,一般是用於在一個類內實現若干過載的方法,這些方法的名稱相同而引數形式不同。

過載的規則

   1、在使用過載時只能通過相同的方法名、不同的引數形式實現。不同的引數型別可以是不同的引數型別,不同的引數個數,不同的引數順序(引數型別必須不一樣);

   2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;

   3、方法的異常型別和數目不會對過載造成影響;

多型的概念比較複雜,有多種意義的多型,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。

一般,我們使用多型是為了避免在父類裡大量過載引起程式碼臃腫且難於維護。

舉個例子:

View Code 複製程式碼
public class Shape

{

   public static void main(String[] args){

     Triangle tri = new Triangle();

     System.out.println("Triangle is a type of shape? " + tri.isShape());// 繼承
     Shape shape = new Triangle();

     System.out.println("My shape has " + shape.getSides() + " sides."); // 多型
     Rectangle Rec = new Rectangle();

     Shape shape2 = Rec;

     System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //過載
   }

   public boolean isShape(){

     return true;

   }

   public int getSides(){

     return 0 ;

   }

   public int getSides(Triangle tri){ //過載
     return 3 ;

   }

   public int getSides(Rectangle rec){ //過載
    return 4 ;

   }

}

class Triangle extends Shape

{

   public int getSides() { //重寫,實現多型
     return 3;

   }

}

class Rectangle extends Shape

{

   public int getSides(int i) { //過載
    return i;

   }

}
複製程式碼

注意Triangle類的方法是重寫,而Rectangle類的方法是過載。對兩者比較,可以發現多型對過載的優點:

如果用過載,則在父類裡要對應每一個子類都過載一個取得邊數的方法;

如果用多型,則父類只提供取得邊數的介面,至於取得哪個形狀的邊數,怎樣取得,在子類裡各自實現(重寫)

2、java中sleep()與wait()方法的區別是什麼?

3、如何實現執行緒的同步?多執行緒同步一般都用到哪些函式?

4、java語言中幾種常用的資料結構及內部實現原理?

5、類成員有幾種訪問許可權?各是什麼含義?預設是什麼許可權?

6、Listview對應的Adapter的getView回撥函式中ConvertView的工作機制是什麼?

未完待續!