博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的abstract抽象
阅读量:5147 次
发布时间:2019-06-13

本文共 2662 字,大约阅读时间需要 8 分钟。

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 的 eat10       Cat c = (Cat)a;        // 向下转型  11       c.work();        // 调用的是 Cat 的 work12   }  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 的 eat10       Cat c = (Cat)a;        // 向下转型  11       c.work();        // 调用的是 Cat 的 work12   }  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

你可能感兴趣的文章
wso2 使用配置
查看>>
关于微软必应词典客户端的案例分析
查看>>
【转载】GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析
查看>>
递增输出带表头结点的单链表元素
查看>>
读取文件的乱码问题
查看>>
windows 常用操作
查看>>
算法(第四版)C# 习题题解——1.4
查看>>
软件测试第一次作业
查看>>
angular中处理多个异步请求的方法汇总
查看>>
一个关于vue+mysql+express的全栈项目(五)------ 实时聊天部分socket.io
查看>>
jQgrid合并行
查看>>
TopK
查看>>
网络协议分析工具wireshark
查看>>
FlowPortal-BPM——功能:判断数据库表中字段是否重复并阻止提交或保存
查看>>
打开终端,提示 “无法加载文件C:\XXX\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本” 的错误...
查看>>
【Web技术学习】JS学习笔记
查看>>
React Native的缓存和下载
查看>>
Python 正则表达式入门(初级篇)
查看>>
python学习之三 scrapy框架
查看>>
[转帖]Docker常用命令总结
查看>>