java中的继承

原创 2016年08月28日 18:24:49

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()没有定义,必须调用其它的构造器


未完成….

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java继承_抽象类与接口的应用.

  • 2015年01月06日 16:10
  • 225KB
  • 下载

27_Java为什么没有多继承

  • 2016年03月28日 15:41
  • 6.25MB
  • 下载

【深入理解JVM】:Java类继承关系中的初始化顺序

来源:http://blog.csdn.net/u011080472/article/details/51330114   Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对J...

java继承多态

  • 2015年08月31日 15:33
  • 178KB
  • 下载

JAVA中有关继承的PPT

  • 2013年11月15日 13:02
  • 276KB
  • 下载

Java面向对象:封装、继承、多态

为什么要面向对象编程? 以前开发的过程通常是采用面向过程编程,面向过程是以过程为中心来进行编程设计,本质上是分析出需要哪些过程,在编程时一步步的对其实现,但是随着软件规模的扩大,这种面向过程的设计模式...

java oop理论(继承)

  • 2016年10月30日 10:41
  • 2KB
  • 下载

Java继承时构造函数的调用

  • 2013年08月06日 15:30
  • 22KB
  • 下载

Java面向对象04-继承,访问控制修饰符,static和final

方法的重写 (override)1. 发生在父子类方法签名相同,方法体不同 2. 重写方法被调用时,看对象的类型不看引用的类型 3. 重写和重载的区别: 1)重载—发生在一个类中,方法...
  • Lh_0618
  • Lh_0618
  • 2016年03月18日 21:53
  • 334

经典java继承例子

  • 2010年05月03日 09:32
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的继承
举报原因:
原因补充:

(最多只允许输入30个字)