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自动化测试脚本,如果脚本写多了,就会发现很多重复的代码。这个时候就要考虑框架,其中框架最重要的是实现帮你少些很多重复代码,这个时候继承就是很好的选择。我们一般做法是,定义一个页面基类,这个类封装一些常见的元素操作方法,子类通过继承这个父类。这样所有的测试页面都同时有元素操作方法。

封装

        封装就是隐藏了实现细节。例如父类定义了一个画图方法,继承的子类都有了画图功能,但是不知道父类画图是如何实现的。还有很多类似不希望外部了解的实现过程,都可以通过封装来实现。函数和类其实就是封装的过程,函数或者类提供给很多其他调用,但是调用的对象不需要知道函数和类内部实现细节。

多态

        多态,就是有多种状态,一个对象有多种特征。多态的实现,主要是通过子类修改父类的方法实现。

关于继承的基本使用就介绍到这里,暂不学习继承的缺点。