zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    abap 调用Http --“Get”
    SAP-PI接口创建中的ABAP处理(不含PI配置)
    ALV 监听事件
    ABAP动态创建内表并展示--自撸版
    ABAP动态生成内表的三种方法
    SAP BP字段增强--付款条件检查
    SAP RFC上传接口(包含发布Webservice地址)
    C# 时间函数
    配置Excel的DCOM权限
    ORA-12571 : TNS : 包写入程序失败
  • 原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/10519669.html
Copyright © 2011-2022 走看看