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) 抽象方法不能使用private、final 和 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