Android面试题
2017-09-13 本文已影响0人
指尖流逝的青春
接口和抽象类的区别:
- 抽象类只能单继承,接口能多实现(一个类只能继承一个抽象类,但是能实现多个接口)
- 抽象类是一个类,可以被任意权限修饰符修饰,静态和非静态属性,final和非final属性,可以有抽象方法和非抽象方法;
接口只能被public,final修饰,只能有静态方法,即使没有显示的声明,而且是不可修改的; - 抽象类可以有任意类型的属性,接口只能有静态常量修饰的属性。
- 抽象类可以有普通方法和抽象法方法,接口的方法都是抽象方法。
- 抽象类和接口都不能实例化,但是抽象类有构造方法,接口没有构造方法。
- 抽象的事物不同: 抽象类是对类的抽象,接口是对行为的抽象;
抽象类是对整个类抽象,包括属性,行为;
接口是对类的行为(局部)进行抽象 - 定义的时候,定义抽象类和接口的思想不同; 设计抽象类是自下而上的过程,我子类需要,所以我定义抽象类;设计接口是自上而下的过程,我接口规范某一行为,我某类需要这个行为,我实现某接口;核心区别:调用者使用动机不同,实现接口是为了使用他规范的某一个行为; 继承抽象类是为了使用这个类属性和行为.
总结:(接口为了规范,抽象为了复用)抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的规则而已。
set和List的区别:
“==”和equals方法究竟有什么区别?
- ==和equals都可以比较地址。==是运算符,equals是方法,方法可以通过重写改变其行为,如String的equals就是比较字符串内容。
重写和重载:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
- 同步指同一时间只能一个线程执行该方法,其他线程需要等待。异步指多个线程可以同时执行某个方法,并共享同一资源。
同步可以让访问的资源具有安全性,因为同一时间只能一个线程对其进行访问。但是效率不高。
异步对访问的资源会造成不稳定性,比如多个线程同时访问一个资源,一个在修改、一个在删除、一个在读取,这样可能会造成资源的混乱。但是由于同时运行, 执行效率得到提高。 - error是系统错误,代码不能处理的错误,比如内存溢出、堆栈溢出等。
exception是程序异常,可以通过代码try-catch进行处理,比如空指针异常,数组越界等。 - final是修饰符,可以修饰类(不能被继承)、属性(常量)、和方法(不能被重写)。
finally是异常处理块中的代码块,表示无论如何都会执行的代码块。
finalize是Object类的方法,该方法在对象被垃圾回收之前执行的方法。 - public公共修饰符,表示任意类都可以访问。
protected为受保护的修饰符,表示同类、同包以及不同包但是父子关系的是可以访问。
不写表示默认修饰符,或者称为package修饰符,该修饰符表示只有同类或同包下的类可以访问,出了这个包就不能访问了。
private为私有修饰符,表示只有同类中可以访问,出了这个类就不能访问了。 - 用最有效率的方法算出2乘以8等於几 2《 3
将2的二进制向左移3位。java中用<<来移位。 - .heap和stack有什么区别。
heap表示堆,stack表示栈。堆中放对象,栈中放引用变量。
堆空间是一个无序的空间,栈是先进后出的结构。 - .什么是java序列化,如何实现java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序 列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化 的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的 writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。