一、抽象类介绍

  

下面通过一下的小程序深入理解抽象类

  因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:public abstract void enjoy();

  从某种意义上来说,抽象方法就是被用来重写的,所以在父类声明的抽象方法一定要在子类里面重写。如果真的不想在子类里面重写这个方法,那么可以再在子类里面把这个方法再定义为抽象方法,因为子类觉得我去实现也不合适,应该让继承我的子类去实现比较合适,因此也可以在继承这个子类的下一个子类里面重写在父类里面声明的抽象方法,这是可以的。

  这里有一个规则:既然父类里面的方法是抽象的,那么对于整个类来说,它就有一个没有实现的方法,这个方法不知道怎么去实现,那么这个类是就是残缺不全的,因此这个类应该被定义为一个抽象类。所以前面这样声明的声明的class Animal应该要在class的前面加上abstract,即声明成这样:abstract class Animal,这样Animal类就成了一个抽象类了。Animal类的最终定义代码如下:

 1 /**2  * 父类Animal3  * 在class的前面加上abstract,即声明成这样:abstract class Animal4  * 这样Animal类就成了一个抽象类了5  */6 abstract class Animal {7 8     public String name;9
10     public Animal(String name) {
11         this.name = name;
12     }
13
14     /**
15      * 抽象方法
16      * 这里只有方法的定义,没有方法的实现。
17      */
18     public abstract void enjoy();
19
20 }

  Java语言规定,当一个类里面有抽象方法的时候,这个类必须被声明为抽象类。

  子类继承父类时,如果这个父类里面有抽象方法,并且子类觉得可以去实现父类的所有抽象方法,那么子类必须去实现父类的所有抽象方法,如:

 1 /**2  * 子类Dog继承抽象类Animal,并且实现了抽象方法enjoy3  * @author gacl4  *5  */6 class Dog extends Animal {7     /**8      * Dog类添加自己特有的属性9      */
10     public String furColor;
11
12     public Dog(String n, String c) {
13         super(n);//调用父类Animal的构造方法
14         this.furColor = c;
15     }
16
17     @Override
18     public void enjoy() {
19         System.out.println("狗叫....");
20     }
21
22 }

  这个父类里面的抽象方法,子类如果觉得实现不了,那么把就子类也声明成一个抽象类,如:

 1 /**2  * 这里的子类Cat从抽象类Animal继承下来,自然也继承了Animal类里面声明的抽象方法enjoy(),3  * 但子类Cat觉得自己去实现这个enjoy()方法也不合适,因此它把它自己也声明成一个抽象的类,4  * 那么,谁去实现这个抽象的enjoy方法,谁继承了子类,那谁就去实现这个抽象方法enjoy()。5  * @author gacl6  *7  */8 abstract class Cat extends Animal {9
10     /**
11      * Cat添加自己独有的属性
12      */
13     public String eyeColor;
14
15     public Cat(String n, String c) {
16         super(n);//调用父类Animal的构造方法
17         this.eyeColor = c;
18     }
19 }

  这里的子类Cat从抽象类Animal继承下来,自然也继承了Animal类里面声明的抽象方法enjoy(),但子类Cat觉得自己去实现这个enjoy()方法也不合适,因此它把它自己也声明成一个抽象的类,那么,谁去实现这个抽象的enjoy方法,谁继承了子类,那谁就去实现这个抽象方法enjoy()。如:

 1 /**2  * 子类BlueCat继承抽象类Cat,并且实现了从父类Cat继承下来的抽象方法enjoy3  * @author gacl4  *5  */6 class BlueCat extends Cat {7 8     public BlueCat(String n, String c) {9         super(n, c);
10     }
11
12     /**
13      * 实现了抽象方法enjoy
14      */
15     @Override
16     public void enjoy() {
17         System.out.println("蓝猫叫...");
18     }
19
20 }

完整的测试代码如下:

  1 package javastudy.summary;2 3 /**4  * 父类Animal5  * 在class的前面加上abstract,即声明成这样:abstract class Animal6  * 这样Animal类就成了一个抽象类了7  */8 abstract class Animal {9 10     public String name;11 12     public Animal(String name) {13         this.name = name;14     }15     16     /**17      * 抽象方法18      * 这里只有方法的定义,没有方法的实现。19      */20     public abstract void enjoy(); 21     22 }23 24 /**25  * 这里的子类Cat从抽象类Animal继承下来,自然也继承了Animal类里面声明的抽象方法enjoy(),26  * 但子类Cat觉得自己去实现这个enjoy()方法也不合适,因此它把它自己也声明成一个抽象的类,27  * 那么,谁去实现这个抽象的enjoy方法,谁继承了子类,那谁就去实现这个抽象方法enjoy()。28  * @author gacl29  *30  */31 abstract class Cat extends Animal {32 33     /**34      * Cat添加自己独有的属性35      */36     public String eyeColor;37 38     public Cat(String n, String c) {39         super(n);//调用父类Animal的构造方法40         this.eyeColor = c;41     }42 }43 44 /**45  * 子类BlueCat继承抽象类Cat,并且实现了从父类Cat继承下来的抽象方法enjoy46  * @author gacl47  *48  */49 class BlueCat extends Cat {50 51     public BlueCat(String n, String c) {52         super(n, c);53     }54 55     /**56      * 实现了抽象方法enjoy57      */58     @Override59     public void enjoy() {60         System.out.println("蓝猫叫...");61     }62     63 }64 65 /**66  * 子类Dog继承抽象类Animal,并且实现了抽象方法enjoy67  * @author gacl68  *69  */70 class Dog extends Animal {71     /**72      * Dog类添加自己特有的属性73      */74     public String furColor;75 76     public Dog(String n, String c) {77         super(n);//调用父类Animal的构造方法78         this.furColor = c;79     }80 81     @Override82     public void enjoy() {83         System.out.println("狗叫....");84     }85 86 }87 88 public class TestAbstract {89 90     /**91      * @param args92      */93     public static void main(String[] args) {94 95         /**96          * 把Cat类声明成一个抽象类以后,就不能再对Cat类进行实例化了,97          * 因为抽象类是残缺不全的,缺胳膊少腿的,因此抽象类不能被实例化。98          */99         //Cat c = new Cat("Catname","blue");
100         Dog d = new Dog("dogname","black");
101         d.enjoy();//调用自己实现了的enjoy方法
102
103         BlueCat c = new BlueCat("BlueCatname","blue");
104         c.enjoy();//调用自己实现了的enjoy方法
105     }
106 }

转载于:https://www.cnblogs.com/estellez/p/5625925.html

java基础—抽象类介绍相关推荐

  1. Java基础(抽象类和接口)

    Java基础 1.抽象类 ①抽象类是对类的抽象,比如波斯猫和加菲猫都属于猫这个类的类对象,猫.狗.鸟又可以抽象为动物这个大类,动物这个类可以被看成是抽象类. ②抽象类的定义: 定义类时在class前面 ...

  2. Java基础or介绍骚话

    Java基础:/骚话阶段/ 英语不好,不要怕用你自己的方式记住关键字格式语法等! 数学不好没事,懂基本! 记性不好没事,多看,多写! 思路自己想,建议看了以后用练习一边练一边学,练习做了以后在学前面的 ...

  3. Java基础 抽象类和接口的区别、equals 与 == 的区别

    一.抽象类和接口有什么区别 抽象类与接口都用于抽象,但是抽象类可以有自己的部分实现,而接口规范某一行为,调用者实现这个接口. 主要区别: 1.抽象类还是类只能单继承,而接口却可以多实现. 2.抽象类满 ...

  4. Java基础:介绍访问控制

    我们知道,封装将数据和处理数据的代码连接起来.同时,封装也提供另一个重要属性:访问控制.通过封装你可以控制程序的哪一部分可以访问类的成员. 通过控制访问,可以阻止对象的滥用.例如,通过只允许适当定义的 ...

  5. Java基础1----java介绍

    文章目录 简介 Java语言的主要特点 可移植性 JDK介绍 简介 Java是现在最流行的编程语言之一,并且自身拥有庞大且完善的生态系统,可以实现我们的任何需求.Java是由SUN公司开发的一个编程语 ...

  6. Java基础(介绍与数据类型)

    计算机(Computer):全称电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔 ...

  7. [Java基础]抽象类和接口的区别

    抽象类和接口的区别:

  8. [Java基础]抽象类基础

    抽象类:

  9. Java 基础数据结构介绍

    基本数据类型 Java 的基本数据类型有 8 种,包括 6 种数字类型.1 种字符类型和 1 种布尔类型. 数字类型包括 4 种整数类型和 2 种浮点数类型,4 种整数类型是 byte.short.i ...

最新文章

  1. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)
  2. ExtJS4.2学习(14)基于表格的扩展插件(2)
  3. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序
  4. ssdt 表结构及hook的一般理解
  5. BESR备机恢复主机
  6. an7062个引脚工作电压_马兰士PM711AV功放电路原理分析
  7. HDU2074 叠筐【打印图案】
  8. jmeter访问网址
  9. 中兴威武3android驱动,中兴威武3
  10. 抖音反编译学习(记录草稿)
  11. uni-app 启动页控制
  12. 今日头条用户搜索“室内设计”显示的自媒体粉丝数量及分布情况统计(2020.1.8)
  13. 山也就只有这么高嘛。
  14. 如何让企业员工不觉得知识库是个鸡肋,附带工具推荐
  15. 实现网站统计之百度统计
  16. 头对风,暖烘烘;脚对风,请郎中
  17. 简单地 sklearn 用神经网络模型分类鸾尾花数据集
  18. 《天才基本法》中的P=NP?问题对应算法逻辑
  19. 2016.09.14,英语,《Using English at Work》全书笔记
  20. 修改内存地址 windows程序设计,王艳平

热门文章

  1. 重磅!GitHub发布年度机器学习榜:TensorFlow最火,PyTorch消失!
  2. abap 取日期最大_Pointer干货分享:SQL面试50题思路解答与分类整理(下)CASE与日期函数...
  3. FMCW毫米波雷达原理
  4. 深度学习(七十)darknet 实现编写mobilenet源码
  5. 馒头何瑫写作训练营的学习笔记总结
  6. 计算机五个部件中协调,计算机基础知识(一)
  7. hprose java 下载_Hprose Java|Hprose For Java下载v2017.2.0官方版 附使用教程 - 欧普软件下载...
  8. 小勇机器人充电头坏了_崇安区管道机器人CCTV-管道爬行机器人,武汉天仪ty333,优质效率高...
  9. redis 内存溢出_查漏补缺,Redis为什么会这么快,看完这七点你就知道了
  10. 003.DNS主从正反解析部署