ALi面试题
JAVA中接口与抽象类的区别
要知道接口与抽象类的区别,首先我们得先知道这两玩意到底是啥。
抽象类是一种专门用来当做父类的类,作用类似于我们所说的“模板”,用关键字abstract声明,其目的是要设计者一句它的格式来修改并创建新的类。但是抽象类并不能创建对象,只能通过抽象类派生出新的类(子类),再由它来创建对象。 抽象类的使用中存在单继承的限制,即一个子类只能继承一个抽象类。
抽象类的使用规则(重要):
- 包含抽象方法的类必须是抽象类。
- 抽象类和抽象方法都必须用“abstract”声明。
- 抽象方法只需要声明,不需要实现。(这句话有点抽象,下面会解释)
- 抽象类必须被继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。
现在解释一下上面所说的第三条规则“抽象方法只需要声明,不需要实现。”
//实现是针对其子类:例如
public abstract class Father{
//show方法在父类中只申明,不实现
public abstract void show();
}
public class Child extends Father{
//实现
public void show{
System.out.println("show method!");
}
}
你看父类的方法
public abstract void show();
只是做了声明,并没有方法体。
在其子类中:
public void show{
System.out.println(“show method!”);
}
实现了方法内部功能,这里只是输出一句话,当然你可以做其他功能。
(这个例子引用自:百度知道)
接口也被理解为是JAVA中的一种特殊的类,用interface声明,是由全局常量和公共方法所组成。需要注意的是,在接口中定义的抽象方法必须是public访问权限,这一点不允许改变。(如果接口方法中省略了public,它的访问权限依然是public,不是default,这一点需要注意。)与抽象类一样,接口若要使用也必须通过子类,子类通过implements关键字来实现接口。
很关键的一点是一个子类可以同时实现多个接口,这就摆脱了JAVA中单继承的局限。
抽象类与接口的区别汇总:
序号 | 区别点 | 抽象类 | 接口 |
---|---|---|---|
1 | 定义 | 包含一个抽象方法的类 | 抽象方法和全局常量的集合 |
2 | 组成 | 构造方法、抽象方法、普通方法、常量、变量 | 常量、抽象方法 |
3 | 使用 | 子类继承抽象类(extends) | 子类实现接口(implement) |
4 | 关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,但允许继承多个接口 |
5 | 常见设计模式 | 模板设计 | 工厂设计、代理设计 |
6 | 对象 | 都通过对象的多态性产生实例化对象 | 都通过对象的多态性产生实例化对象 |
7 | 局限 | 抽象类有单继承的局限 | 接口没有单继承的局限 |
8 | 实际 | 作为一个模板 | 作为一个标准或表示一种能力 |
另外两点:在选择上,如果抽象类和接口都可以被使用,则优先使用接口,避免单继承的局限;特殊的,一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类。
(上面来自《Java开发实战经典》(李兴华著)与峰哥面经)
简述JVM的内存布局
(未完待续!最近在准备阿里的机试,更新进度可能会慢一点了)