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