百度面试经验2-android开发工程师

来源:互联网 发布:定制家居拆单下料软件 编辑:程序博客网 时间:2024/06/04 19:07

        我周六又不自量力的去了百度移动云事业部的专场招聘会,我知道我没戏,但是这毕竟是机会。排队三个多小时,最后在泱泱人海中,终于求的这几道面试题。与大家共勉之。

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的工作机制是什么?

 

未完待续!

 

原创粉丝点击