一, 抽象类与接口的异同
1, 异处
1抽象类是用 abstract 关键字修饰的类, 其内须包含未经实现的用 abstract 关键字修饰的方法(即抽象方法); 接口是服务提供方和想让它们的对象对服务是可用的那些类之间约定合同的一种机制, 简单点说就是交互两方对象之间的一种约定, 约定了由一方实现接口, 另一方使用接口.
2抽象类中的成员变量可以被不同的修饰符来修饰, 可接口中的成员变量默认的都是静态常量(static final)
3抽象类中的方法可以既有抽象方法(必有), 又有普通实现方法(可有可无); 接口中的方法全部是抽象方法. 因此抽象类提供了部分方法的实现, 而接口是万万不能的.
4抽象类保持 JAVA 单继承的一贯作风, 而接口则打破旧例 "允许" 多重继承. 即一个类只能够继承一个抽象类(它有唯一派生类), 却可以实现多个接口(它可有多个派生类), 并且从抽象类派生的类仍可实现接口. 此外, 接口可以继承接口.
5抽象类能定义构造方法; 接口无构造方法.
2, 同处
1都可以被继承或实现
2都包含抽象方法, 并且皆强制派生类覆写这些抽象方法
3都不能实例化, 由派生类继承或实现.
小图来记忆:
巧记: 抽象类和接口都是糟老头子, 坏得很, 都可以是很多个孩子 (子类或其他接口) 的 "爸爸".
子类这个不乖的仔, 有很多的 "爸爸", 抽象类是它唯一的 "亲爸", 接口是它众多的 "干爸爸".
抽象类代码:
- abstract class Abs{
- public int id;
- public String name;
- public void tell() {
- }
- // 抽象方法
- public abstract void say();
- public abstract void speak();
- }
- class AbsDemo extends Abs{
- // 子类覆写抽象类所有的抽象方法
- public void say() {
- id = 12345678;
- System.out.println(id);
- }
- public void speak() {
- name = "小红";
- System.out.println(name);
- }
- }
- public class Demo33 {
- public static void main(String[] args) {
- AbsDemo a = new AbsDemo();
- a.say();
- a.speak();
- }
- }
- View Code
接口代码:
- interface B{
- // 全局常量
- public static final int PRICE =15;
- // 抽象方法
- public abstract void Total();
- }
- // 子类实现接口, 覆写其所有的抽象方法
- class Inter implements B{
- public void Total(){
- int num = 10,total;
- total = num * PRICE;
- System.out.println("总价是:"+total);
- }
- }
- public class demo34 {
- public static void main(String[] args) {
- Inter a = new Inter(); // 实例化一个对象 a
- a.Total(); // 调用 Total()方法
- }
- }
- View Code
二, 集合框架
小图来记忆:
Collection 是一个包含 List 列表与 Set 集合的接口, 也是高度抽象出来的集合, 攘括了集合的基本操作和属性.
List 是一个有序的队列, 每一个元素都有它的索引. 第一个元素的索引值是 0.
Set 集合不允许有重复元素.
Map 是一个映射接口, 即 key-value 键值对. Map 中的每一个元素包含 "一个 key" 和 "key 对应的 value".
Iterator, 它是遍历集合的工具, 即我们通常通过 Iterator 迭代器来遍历集合.
Enumeration, 它是 JDK 1.0 引入的抽象类. 作用和 Iterator 一样, 也是遍历集合; 但是 Enumeration 的功能要比 Iterator 少.
Arrays 和 Collections, 它们是操作数组, 集合的两个工具类.
来源: http://www.bubuko.com/infodetail-3037344.html