抽象类和接口的区别:

抽象类和接口的区别:
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 }

猜你喜欢

转载自www.cnblogs.com/royfans/p/9975780.html