抽象类和接口的区别:
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象

B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承

C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

1 package day9;
2
3 /**
4 * Created by admin on 2018/11/17.
5 * 接口的特点:
6 A:接口用关键字interface表示
7 interface 接口名 {}
8 B:类实现接口用implements表示
9 class 类名 implements 接口名 {}
10 C:接口不能实例化
11 那么,接口如何实例化呢?
12 按照多态的方式来实例化。
13 D:接口的子类
14 a:可以是抽象类。但是意义不大。
15 b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
16
17 由此可见:
18 A:具体类多态(几乎没有)
19 B:抽象类多态(常用)
20 C:接口多态(最常用)
21 */
22
23 interface AnimalTrain {
24 void jump();
25 }
26
27 //抽象类实现接口
28 abstract class Dogs implements AnimalTrain {
29 public void dogs(){
30 System.out.println("this is dog");
31 }
32 }
33 class Cats extends Dogs {
34 @Override
35 public void jump() {
36 System.out.println("this is jump");
37 }
38 }
39 public class InterfaceDemo {
40 public static void main(String[] args){
41 Dogs at = new Cats();
42 at.jump();
43 at.dogs();
44 }
45
46
1 package day9;
2
3 /**
4 * Created by admin on 2018/11/17.
5 * 接口成员特点
6 成员变量;只能是常量,并且是静态的。
7 默认修饰符:public static final
8 建议:自己手动给出。
9 构造方法:接口没有构造方法。
10 成员方法:只能是抽象方法。
11 默认修饰符:public abstract
12 建议:自己手动给出。
13
14 所有的类都默认继承自一个类:Object。
15 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。
16 */
17 interface Inter{
18 public int num = 10;
19 public final int num2 = 20;
20 public static final int num3 = 30;
21
22 //错误: 需要<标识符>
23 //public Inter() {}
24
25 //接口方法不能带有主体
26 //public void show() {}
27
28 //abstract void show(); //默认public
29 void show(); //默认abstract
30 }
31 //接口名+Impl这种格式是接口的实现类格式
32 /*
33 class InterImpl implements Inter {
34 public InterImpl() {
35 super();
36 }
37 }
38 */
39 class InterImpl implements Inter {
40 public InterImpl() {
41 super();
42 }
43 public void show() {}
44 }
45 public class InterfaceDemo2 {
46 public static void main(String[] args) {
47 System.out.println();
48 InterImpl i = new InterImpl();
49 i.show();
50 Inter it = new InterImpl();
51 System.out.println(it.num);
52 System.out.println(it.num2);
53 System.out.println(it.num3);
54 }
55
1 package day9;
2
3 import com.sun.prism.impl.paint.PaintUtil;
4 import org.omg.CORBA.PUBLIC_MEMBER;
5
6 /**
7 * Created by admin on 2018/11/17.
8 * /*
9 老师和学生案例,加入抽烟的额外功能
10
11 分析:从具体到抽象
12 老师:姓名,年龄,吃饭,睡觉
13 学生:姓名,年龄,吃饭,睡觉
14
15 由于有共性功能,我们提取出一个父类,人类。
16
17 人类:
18 姓名,年龄
19 吃饭();
20 睡觉(){}
21
22 抽烟的额外功能不是人或者老师,或者学生一开始就应该具备的,所以,我们把它定义为接口
23
24 抽烟接口。
25
26 部分老师抽烟:实现抽烟接口
27 部分学生抽烟:实现抽烟接口
28
29 实现:从抽象到具体
30
31 使用:具体
32 */
33
34 interface Smoking {
35 void smoking();
36 }
37 abstract class People {
38 String name;
39 int age;
40 public People(){}
41 public People(String name,int age){
42 this.name = name;
43 this.age = age;
44 }
45 public String getName() {
46 return name;
47 }
48
49 public void setName(String name) {
50 this.name = name;
51 }
52
53 public int getAge() {
54 return age;
55 }
56
57 public void setAge(int age) {
58 this.age = age;
59 }
60 public abstract void eat();
61
62 public void sleep(){
63 System.out.println("sleep");
64 }
65 }
66
67 class Teacher extends People implements Smoking{
68 public Teacher(){}
69 public Teacher(String name,int age){
70 super(name, age);
71 }
72 public void eat() {
73 System.out.println("Teacher eat baicai");
74 }
75 public void smoking(){
76 System.out.println("Teacher smoking");
77 }
78 }
79
80 abstract class Students extends People implements Smoking {
81 public Students() {}
82 public Students(String name,int age) {
83 super(name, age);
84 }
85
86 }
87 public class InterfaceTest {
88 public static void main(String[] args) {
89 Teacher t = new Teacher("BOB",20);
90 System.out.println(t.getName() + t.getAge());
91 t.eat();
92 t.smoking();
93 }
94
95