Java的abstract抽象

abstract用于定义抽象类,抽象类表示没有具体的实现方法。

下面举一个例子:(源码来自菜鸟教程)

 1 package work_station;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5       show(new Cat());  // 以 Cat 对象调用 show 方法
 6       show(new Dog());  // 以 Dog 对象调用 show 方法
 7                 
 8       Animal a = new Cat();  // 向上转型  
 9       a.eat();               // 调用的是 Cat 的 eat
10       Cat c = (Cat)a;        // 向下转型  
11       c.work();        // 调用的是 Cat 的 work
12   }  
13             
14     public static void show(Animal a)  {
15       a.eat();
16         // 由于没有对work进行抽象定义,所以此处要进行类型判断
17         if (a instanceof Cat)  {  // 猫做的事情 
18             Cat c = (Cat)a;  
19             c.work();  
20         } else if (a instanceof Dog) { // 狗做的事情 
21             Dog c = (Dog)a;  
22             c.work();  
23         }  
24     }  
25 }
26  
27 abstract class Animal {  //抽象定义,只有抽象方法的定义没有,没有实现方式
28     abstract void eat();  //此时没有对work进行抽象定义
29 }  
30   
31 class Cat extends Animal {  
32     public void eat() {  
33         System.out.println("吃鱼");  
34     }  
35     public void work() {  
36         System.out.println("抓老鼠");  
37     }  
38 }  
39   
40 class Dog extends Animal {  
41     public void eat() {  
42         System.out.println("吃骨头");  
43     }  
44     public void work() {  
45         System.out.println("看家");  
46     }  
47 }

下面对work进行抽象定义。

 1 package work_station;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5       show(new Cat());  // 以 Cat 对象调用 show 方法
 6       show(new Dog());  // 以 Dog 对象调用 show 方法
 7                 
 8       Animal a = new Cat();  // 向上转型  
 9       a.eat();               // 调用的是 Cat 的 eat
10       Cat c = (Cat)a;        // 向下转型  
11       c.work();        // 调用的是 Cat 的 work
12   }  
13             
14     public static void show(Animal a)  {
15       a.eat();
16       a.work(); //直接对work进行调用
17 //        // 类型判断
18 //        if (a instanceof Cat)  {  // 猫做的事情 
19 //            Cat c = (Cat)a;  
20 //            c.work();  
21 //        } else if (a instanceof Dog) { // 狗做的事情 
22 //            Dog c = (Dog)a;  
23 //            c.work();  
24 //        }  
25     }  
26 }
27  
28 abstract class Animal {  //抽象定义,只有抽象方法的定义没有,没有实现方式
29     abstract void eat();  
30     abstract void work();
31 }  
32   
33 class Cat extends Animal {  
34     public void eat() {  
35         System.out.println("吃鱼");  
36     }  
37     public void work() {  
38         System.out.println("抓老鼠");  
39     }  
40 }  
41   
42 class Dog extends Animal {  
43     public void eat() {  
44         System.out.println("吃骨头");  
45     }  
46     public void work() {  
47         System.out.println("看家");  
48     }  
49 }
原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/10519669.html