abstract class 抽象类--不具体的类 \9 m, Z* x0 N2 f \# m7 o8 p+ Y+ J. @, M
abstract: 抽象的, 是指不够具体, 概念性的 % j4 b, o$ Q$ G ; e( v2 C# H5 @% C- ?, f 1) 抽象方法,只有行为的概念,没有具体的行为实现。4 P! F' O/ [) ^/ u7 [& t
使用:abstract 关键字修饰,并且没有方法体。 3 F& ~# {& Y* K; n1 | 2) 包含抽象方法的类,就一定是抽象类。( O/ L _! J! g( W. ^3 N
使用: abstract 关键字修饰,包含抽象方法。; B. {+ `6 Z5 w
如:平面图形一定可以计算面积。; L+ F3 F' i2 R2 _/ R. a3 B
& Z# y+ u7 W% x' T2 A% ] 3) 抽象类不能直接创建实例。可以定义引用变量。6 V) S7 ^7 }) C0 ^+ F
4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实 , U% W$ U' F I8 U6 v8 O/ |+ \+ z 现所有抽象方法。 n$ I+ h$ c' n, k1 t3 M
5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。 " c5 F8 g$ T% C# O5 r public class abstract CRMSystem{ : h* P' Q- y, S public abstract Client add(Client newGuy); " M' N0 q4 K# ?( C4 o' M5 a public abstract Event add(Event e, Client guy);. E, S1 X" R ~# _" K0 @
public abstract Event[] todayEvents(); % g6 F9 h( h* H6 B, `9 k }8 I% L' x0 K: d$ ^0 f5 a
, f8 b. Z4 r- p* v2 f 接口, 相当于纯抽象类(cpp纯虚类)1 w* j8 ?3 N- b$ r( G
1 接口:全部的方法都是抽象方法,全部的属性都是常量。3 u% N. L" ]5 e, Z2 ^7 ^, P7 w
接口用来表示纯抽象概念,没有任何具体的方法和属性。/ K6 D; u7 E# g# A+ i: r5 s; n
public interface CRMSystem{ $ |! {! z U& C `- c& f Client add(Client newGuy);; S' _: R5 i1 D" d6 B9 F1 u
Event add(Event e, Client guy); 2 s6 n: j4 U* ?: B4 x# k& f Event[] todayEvents();. O, F I7 d% W4 F" ?8 B3 A6 f6 q
} ( x: N5 s" J o! C) M: U* C 2 不能实例化,可以定义变量。+ W9 D3 O, G/ P1 U
3 接口变量可以引用具体实现类的实例。; F0 c$ Q7 G5 k$ M& S
4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的 ) D% @; h' ?+ b, ?0 e 抽象方法。 " a/ {8 B$ o. W* |+ f0 S9 B 5 接口之间可以继承。; u* i% n+ {9 ^; \3 p# u
6 一个具体类可以实现多个接口,实现多继承现象,表示: # d2 i X! {7 I, u i+ ?% J 一个概念即是XXX也是XXX.4 h) O0 K' `0 A9 W5 F4 l
7 接口中的属性,默认是常量 public static final ( @/ E) n, b7 ~& g$ |. @/ E0 E 8 接中的方法一定是:public abstract 5 s1 ?$ a: x8 h- O5 F7 Q
9 实现一个接口,使用关键字implements, 实现实际上是& ?+ V/ x& G1 y2 n5 q: E( c0 ]5 d
一种继承关系。接口和实现类是父子类型的关系 , f( m* v. K2 O3 F$ N0 [ 0 N2 Z: r% [' w0 @ X , b; r5 m2 f% s% f% Z