Java高级篇-9-继承
来源:互联网 发布:数据库查询语句讲解 编辑:程序博客网 时间:2024/06/07 14:31
本篇来学习下Java中的继承知识,说到继承,应该能想起Java面向对象的三大特性,继承,多态,封装。我们本篇来了解继承,其实多态和封装和继承是有关系的,理解了继承,剩下两个概念就很好理解。要了解继承,我们先要了解父类的概念。Java中任何类都有一个父类,即使你没有声明父类,也有一个隐含的父类,叫Object。Object没有定义,但是定义了一些方法,例如我们常用的equals和toString方法。
1.什么是继承和为什么要继承
继承,就像生活中的财产继承。在Java中,有一个父类,通过继承,子类就自动拥有了父类的属性和行为。子类继承父类是通过关键字extends实现的。因为通过继承,能减少我们很多重复的代码,提高开发效率。直接来看看下面一个例子。我们在同一个包下新建四个java文件:Shape.java 这个作为父类,Circle.java一个子类,实现画圆,Square.java实现画方形,InhritanceDemo.java 用来测试。
package javademo;public class Shape { //定义一个画图方法 void Draw(){ System.out.println("画一个形状"); } // 没有写具体实现擦除方法 void erase(){ } //定义一个打印图形方法,该方法是不可以被子类改写 final void print(){ System.out.println("打印画出的图形"); }}
下面的圆形类,注意下面两个方法都是实现子类重写了父类的方法。第一个方法是重写了父类的画图方法。第二个是实现了擦除的方法,父类只是定义,但是没有实现。
package javademo;public class Circle extends Shape{ void draw(){ System.out.println("画一个圆形"); } void erase(){ System.out.println("擦除圆形"); }}
package javademo;public class Square extends Shape { void draw(){ System.out.println("画一个方形"); }}这里,提一下,如果在上面代码尝试重写print方法,会提示final方法不能被overwrite。所以,在实际项目中,如果父类哪个方法不希望被子类修改,就在这个方法添加final修饰。
package javademo;public class InhritanceDemo { public static void main(String args[]){ String myShape = "square"; switch (myShape){ case"circle": Circle c = new Circle(); c.draw(); break; case "square": Square s = new Square(); s.draw(); break; } }}
测试中用到继承的项目举例
很多人写过webui自动化测试脚本,如果脚本写多了,就会发现很多重复的代码。这个时候就要考虑框架,其中框架最重要的是实现帮你少些很多重复代码,这个时候继承就是很好的选择。我们一般做法是,定义一个页面基类,这个类封装一些常见的元素操作方法,子类通过继承这个父类。这样所有的测试页面都同时有元素操作方法。
封装
封装就是隐藏了实现细节。例如父类定义了一个画图方法,继承的子类都有了画图功能,但是不知道父类画图是如何实现的。还有很多类似不希望外部了解的实现过程,都可以通过封装来实现。函数和类其实就是封装的过程,函数或者类提供给很多其他调用,但是调用的对象不需要知道函数和类内部实现细节。
多态
多态,就是有多种状态,一个对象有多种特征。多态的实现,主要是通过子类修改父类的方法实现。
关于继承的基本使用就介绍到这里,暂不学习继承的缺点。
- Java高级篇-9-继承
- Java-面向对象(高级篇)--继承的基本概念
- Java-面向对象(高级篇)--继承的进一步研究
- 继承的基本概念(Java面向对象高级篇)
- Java类高级特性之内部类继承
- Java面向对象高级--继承的基本实现--extends
- Java面向对象高级--继承的进一步研究
- Java高级特性之继承一个内部类
- Java高级特性部分(继承与多线程)
- Java高级篇整理
- java问题解答高级篇
- Java高级篇整理
- 高级类特性 继承
- 《JavaScript高级程序设计》--继承
- C# 高级编程 继承
- Java 9:继承2
- java基础篇-继承
- Java进阶篇---继承
- solution_659
- Mysql 利用group by 分组排序
- c#同时上传文件和参数
- pwnable.tw记录之applestore
- GIT学习笔记(5)
- Java高级篇-9-继承
- 30天了解30种技术系列(14)----Docker集群管理利器Swarm
- okhttp源码解析
- RecycleView深入理解系列之ItemDecoration
- C++程序设计案例实训教程 前言
- 页面弹框,禁止背景元素滚动(只禁止了mousewheel事件,鼠标还是可以拖动的)
- 【JZOJ 5439】【NOIP2017提高A组集训10.31】Calculate
- 刚用上Ubuntu,nginx和php搭建,phpsotrm和xdebug
- 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)