java抽象类概述特点_抽象类java抽象类概述特点_子类_02
 1 package face_09;
 2 /*
 3  * 抽象类:
 4  * 抽象:笼统,模糊,看不懂!不具体。
 5  * 
 6  * *特点:
 7  * 1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。
 8  *    抽象方法必须定义在抽象类中。该类必须也被abstract修饰。
 9  * 2,抽象类不可以被实例化。为什么?因为调用抽象方法没意义。
10  * 3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化。
11  *    否则,这个子类还是抽象类。
12  * *问题:
13  * 1,抽象类中有构造函数吗?
14  *    有,用于给子类对象进行初始化。
15  *    
16  * 2,抽象类可以不定义抽象方法吗?
17  *    可以的。但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类
18  *    通常这个类中的方法有方法体,但是却没有内容。
19  *    
20  *    class Demo{
21  *        void show1(){}
22  *        void show2(){}
23  *    }
24  * 3,抽象关键字不可以和哪些关键字共存?
25  *     private abstract不行 一般抽象方法用于被覆盖,private后私有化不能覆盖
26  *     static abstract不行 成员变静态 不需要对象,类名调用方法,但抽象方法调用没意义方法体都没有。
27  *     final abstract不行  final修饰不能有子类,两者排斥
28  * 4,抽象类和一般类的异同点。
29  *     相同点:
30  *         抽象类和一般类都是用来描述事物的,都在内部定义了成员。
31  *     不同点:
32  *         1,一般类有足够的信息描述事物。
33  *           抽象类描述事物的信息有可能不足。
34  *         2,一般类中不能定义抽象方法,只能定义非抽象方法。
35  *           抽象类中可以定义抽象方法,同时也可以定义非抽象方法。
36  *         3,一般类可以被实例化。
37  *           抽象类不可以被实例化。
38  * 5,抽象类一定是个父类吗
39  *   是的,因为需要子类覆盖其方法后才可以对子类实例化。
40  */
41 abstract class Demo{
42     
43     abstract /*抽象*/void show();
44     
45 }
46 class DemoA extends Demo {
47     void show() {
48         //System.out.println("demoa show");这里不覆盖就会有继承上面的抽象方法,该类也必须是抽象类
49     }
50 }
51 class DemoB extends Demo {
52     void show() {
53         System.out.println("demob show");
54     }
55 }
56 
57 abstract class 犬科 {
58     abstract void 吼叫();
59 }
60 classextends 犬科 {
61     void 吼叫() {
62         System.out.println("汪汪");
63     }
64 }
65 classextends 犬科 {
66     void 吼叫() {
67         System.out.println("嗷嗷");
68     }
69 }
70 public class AbstractDemo {
71     public static void main(String[] args) {
72         System.out.println("Hello World");
73     }
74 }
View Code