abstract class 抽象类--不具体的类( v. S" q2 i2 [
6 g) [3 `$ _, g6 M4 K/ x
abstract: 抽象的, 是指不够具体, 概念性的 6 w8 L2 P" E$ Z7 S u0 V! {; n l2 n1 X4 `7 R; Y% S0 k 1) 抽象方法,只有行为的概念,没有具体的行为实现。 * ?% }4 M" _6 y. K' A. x" A 使用:abstract 关键字修饰,并且没有方法体。 # M G i. A- a 2) 包含抽象方法的类,就一定是抽象类。4 q5 u4 C. I: Q, y* t$ N
使用: abstract 关键字修饰,包含抽象方法。 4 z, h( z. o. l' `/ `* f7 ], Y2 d: C5 v6 m 如:平面图形一定可以计算面积。 $ B3 N. b) Z6 O& v. [9 n9 m% z " S/ h; ~# I r 3) 抽象类不能直接创建实例。可以定义引用变量。$ b* O( k, p. n+ @. Y' i
4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实" F1 T I7 d# D- V$ O
现所有抽象方法。 ! x8 e; [! v# g( M 5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。2 k9 z+ e O; z6 [# f
public class abstract CRMSystem{$ e+ j+ S) Q a! T+ p/ [
public abstract Client add(Client newGuy); 0 e" y/ J" ~. U public abstract Event add(Event e, Client guy); / f2 t1 i" c4 z- Y" E public abstract Event[] todayEvents(); : D+ t, f4 b! ~ } 4 @0 U7 ^: y! [3 v4 X" d. d7 j$ o5 b: B" q9 x
接口, 相当于纯抽象类(cpp纯虚类); ^3 ^: o1 n9 v2 G
1 接口:全部的方法都是抽象方法,全部的属性都是常量。 8 @$ U5 S' S& m* a7 E/ n5 h$ R 接口用来表示纯抽象概念,没有任何具体的方法和属性。& e" w5 O- m) U
public interface CRMSystem{ ; e; W$ C" w) d# }% P: W: E Client add(Client newGuy);6 K( v: K" @6 k( |& L
Event add(Event e, Client guy); " F+ Q* q, p4 E. e7 Z: I6 c Event[] todayEvents();2 L- ^0 p' p5 k9 n/ v G
}+ U; e8 N8 b$ N. Q5 k
2 不能实例化,可以定义变量。 1 W- @- l% P. E 3 接口变量可以引用具体实现类的实例。 D5 }% e! F$ a5 u. ?9 K 4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的 : }8 f/ w$ u7 U: ? 抽象方法。0 {# u* _/ h: L E
5 接口之间可以继承。 + D4 Z) i7 p* F8 | } 6 一个具体类可以实现多个接口,实现多继承现象,表示: 8 g4 ~. K9 R) y 一个概念即是XXX也是XXX. 0 H, G. x2 j: v1 s 7 接口中的属性,默认是常量 public static final - p& J! W. e) M3 |8 }7 T( j8 P
8 接中的方法一定是:public abstract 0 D, m! E6 e4 c2 {2 k& S6 M
9 实现一个接口,使用关键字implements, 实现实际上是: l+ T3 L, h, S8 a0 F
一种继承关系。接口和实现类是父子类型的关系 ?& |* m0 M p* ^ + H* U2 u* A; }. v2 Y1 V4 R6 Z g5 o