1. 程式人生 > >抽象類和介面的區別:

抽象類和介面的區別:

抽象類和介面的區別:
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 }