第11章(下)--面向对象编程(高级特性)

1.  抽象类

 

当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract 来修饰该类就是抽象类。

      抽象类的介绍

 

1)      用abstract 关键字来修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 类名{
}

2)      用abstract 关键字来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表);

 

3)      抽象类的价值更多是在于设计,是设计者设计好后,让子类继承并实现抽象类(即:实现抽象类的抽象方法)

 

4)      抽象方法在编程中用的不是很多,但是在公司笔试时,却是考官比较爱问的知识点

   抽象类使用的注意事项和细节讨论

 

1)      抽象类不能被实例化  [举例]

2)      抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法 [举例]

3)      一旦类包含了abstract方法,则这个类必须声明为abstract [说明]

4)      abstract 只能修饰类和方法,不能修饰属性和其它的。[说明]

5)      抽象类可以有任意成员【因为抽象类还是类】,比如:非抽象方法、构造器、静态属性等等 [举例]

6)      抽象方法不能有主体,即不能实现.如图所示

7)      如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。[举例 A类,B类,C类]

8)      抽象方法不能使用privatefinal static来修饰,因为这些关键字都是和重写相违背的。说明: static关键字是不和重写相关,static方法不能重写

 

  • 和前面一样,多态在抽象类上也体现在

多态数组【存放不同的子类对象, Dog和Cat】

多态参数【接收不同的子类对象】

 1 public class AbstractPolyDemo {
 2 
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         
 6         Animal03 animals[] = new Animal03[2];
 7         animals[0] = new Cat03();
 8         animals[1] = new Dog03();
 9         
10         //抽象类体现出多态数组
11         for (int i = 0; i < animals.length; i++) {
12             animals[i].eat();
13             show(animals[i]);
14         }
15 
16     }
17     
18     //多态参数
19     public static void show(Animal03 animal) {
20         if (animal instanceof Cat03) {
21             Cat03 cat = (Cat03)animal;
22             cat.catchMouse();
23         } else if (animal instanceof Dog03) {
24             Dog03 dog = (Dog03)animal;
25             dog.watchDoor();
26         }
27     }
28 
29 }
30 
31 abstract class Animal03 {
32     
33     abstract public void eat();
34 }
35 
36 class Cat03 extends Animal03 {
37 
38     @Override
39     public void eat() {
40         // TODO Auto-generated method stub
41         System.out.println("小猫喜欢吃<・)))><<");
42     }
43     
44     public void catchMouse() {
45         System.out.println("小猫抓老鼠");
46     }
47     
48 }
49 
50 class Dog03 extends Animal03 {
51 
52     @Override
53     public void eat() {
54         // TODO Auto-generated method stub
55         System.out.println("小狗喜欢吃骨头~~");
56     }
57     
58     public void watchDoor() {
59         System.out.println("小狗看门~~");
60     }
61     

猜你喜欢

转载自www.cnblogs.com/-xuewuzhijing-/p/13171395.html