java中的继承

1. 写在前面

对于程序而言,客观的事物可以分为两大类:变的和不变的;不变的,我们可以抽象为程序;而变动的,我们可以抽象为变量。当程序中有了变量之后,便可以去处理一些事情了。
继承,是将不变的,抽象为程序的,再一次的升华。

2. 继承的定义

在面向对象编程中,通过对一个已有的类进行扩展(新增)和改造(覆盖),从而构造出新的类,这样的编程方式称为继承。

3.继承的优点

  • 简化编程过程
  • 提高代码的复用率

4.继承的具体实现

在使用继承的时候,通常有两种方式来构建子类(导出类):覆盖和新增。
覆盖指的是子类(导出类)重写父类(基类)的方法,使之具有新的实现;新增指的是子类(导出类)新增新的方法。

5.代码示例

我现在构建几个图形对象:三角形,矩形,圆形,这些图形具有共同的属性(暂时不添加)和方法:draw( )–绘制,erase( )–擦除(我们可以把这共同的属性和方法抽象成父类shape);

  • 父类shape
package extendsAndPolymorphism;
/**
 * 父类对象--图形
 * @author lt
 * @date 2017年2月12日
 * @version V1.0
 */
public class Shape {

    /**
     * 绘制图形方法
     * @author lt
     * @Date 2017年2月12日
     */
    public void draw(){
        System.out.println("【图形】绘制...");
    };

    /**
     * 擦除图形方法
     * @author lt
     * @Date 2017年2月12日
     */
    public void erase(){
        System.out.println("【图形】擦除...");
    };
}
  • 子类-矩形
package extendsAndPolymorphism;
/**
 * 矩形
 * @author lt
 * @date 2017年2月12日
 * @version V1.0
 */
public class Rectangle extends Shape{

    @Override
    public void draw() {
        System.out.println("【矩形】绘制...");
    }

    @Override
    public void erase() {
        System.out.println("【矩形】擦除...");
    }

}
  • 三角形
package extendsAndPolymorphism;
/**
 * 三角形
 * @author lt
 * @date 2017年2月12日
 * @version V1.0
 */
public class Triangle extends Shape{

    @Override
    public void draw() {
        System.out.println("【三角形】绘制...");
    }

    @Override
    public void erase() {
        System.out.println("【三角形】擦除...");
    }

}
  • 圆形
package extendsAndPolymorphism;
/**
 * 圆形
 * @author lt
 * @date 2017年2月12日
 * @version V1.0
 */
public class Circle extends Shape{

    @Override
    public void draw() {
        System.out.println("【圆形】绘制...");
    }

    @Override
    public void erase() {
        System.out.println("【圆形】擦除...");
    }

}
  • 测试类
package extendsAndPolymorphism;
/**
 - 继承和多态
 - @author lt
 - @date 2017年2月12日
 - @version V1.0
 */
public class Test {

    public static void doSomething(Shape shape){
        shape.draw();
        shape.erase();
    }

    public static void main(String[] args) {
        Shape circle = new Circle();
        Shape square = new Square();
        Shape triangle = new Triangle();
        doSomething(circle);
        doSomething(square);
        doSomething(triangle);

    }
}
  • 输出结果
【圆形】绘制...
【圆形】擦除...
【正方形】绘制...
【正方形】擦除...
【三角形】绘制...
【三角形】擦除...

6.继承中常见问题

在继承的过程中,要注意一个问题,一旦继承了某个类,子类必将会调用父类的构造器,否则的话,就无法去调用父类中的一些方法。
如果子类没有调用父类构造器,那么就会报错。
在下面我举个例子:

  • 父类,没有无参构造器:
public class Father {

    public Father(String s){
        System.out.println("父类有参(一个)构造器:Father(String s)");
    }
    public Father(String s1, String s2){
        System.out.println("父类有参(两个)构造器:Father(String s1, String s2)");
    }
    public void print(){
        System.out.println("父类无参方法:print()");
    }
    public void print(String s){
        System.out.println("父类带参方法:print(String s)");
    }
}
  • 子类,创建无参构造器就会报错:
public class Child extends Father{

    public Child(){   //在此会报错

    }
    public Child(String s1, String s2) {
        super(s1, s2);
        // TODO Auto-generated constructor stub
    }
    public Child(String s1, String s2, String s3){
        super(s1, s2);
    }
    public void print(){
        System.out.println("子类无参方法:print()");
    }
    public static void main(String[] args) {
        Father c = new Child("1", "2");
        c.print();
    }
}
所报错为:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor

意思是:隐式的父类构造器Father()没有定义,必须调用其它的构造器


未完成….

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KJGMan/article/details/52346988
文章标签: java se
个人分类: Java基础
上一篇Java Swing-JTable中的单元格拆分与合并
下一篇利用dom4j操作XML文件(一)
想对作者说点什么? 我来说一句

JAVA中的继承学习总结

2009年12月15日 181KB 下载

java中的继承与多态

2011年01月09日 280KB 下载

没有更多推荐了,返回首页

关闭
关闭