小朋友学Java(7):继承

在学习Java的继承之前,可以先复习一下C++的继承: http://www.jianshu.com/p/bc9b7ddb141c

一、定义

继承就是子类(派生类)继承父类(基类)的特征和行为,使得子类对象(实例)具有与父类相同的行为。

二、生活中的继承

牛和羊属于食草动物类,老虎和狼属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,即子类 is a 父类。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别。所以子类除了具有父类的一般特性外,也会具有自身的特性。

三、继承的语法格式

C++中的继承格式为 class 子类:访问权限修饰符 父类 比如class Dog : public Animal

Java中的继承格式为class 子类 extends 父类 比如class Dog extends Animal

extends表示扩展的意思,这个词表明了子类的父类的扩展

四、为什么需要继承

接下来我们通过实例来说明这个需求。 开发动物类,其中动物分别为猫和老鼠,要求如下: 老鼠:属性(姓名,id),方法(吃,睡,自我介绍,挖洞) 猫:属性(姓名,id),方法(吃,睡,自我介绍,抓老鼠)

编写Mouse类:

public class Mouse { 
    private String name; 
    public Mouse(String name){ 
        this.name = name; 
    }
    public void introduce() { 
        System.out.println("Hello, everybody! My name is  " + name + ".");      
    } 
    public void eat() { 
        System.out.println("I am eating"); 
}
    public void sleep() {
        System.out.println("I am is sleeping");
    }
    public void dig() {
        System.out.println("I am digging hole");
    }
}

编写Cat类:

public class Cat { 
    private String name; 
    public Cat(String name){ 
        this.name = name; 
    }
    public void introduce() { 
        System.out.println("Hello, everybody! My name is  " + name + ".");      
    } 
    public void eat() { 
        System.out.println("I am eating"); 
}
    public void sleep() {
        System.out.println("I am is sleeping");
    }
    public void catchMouse() {
        System.out.println("I am catching mouse");
    }
}

从这两段代码可以看出来,代码存在重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错,比如要修改introduce方法中的内容,就得修改每个类中的introduce方法),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成一个父类Animal

五、继承例子

新建四个文件:Animal.java, Mouse.java, Cat.java, AnimalTest.java

Animal.java中的内容为:

public class Animal{ 
    private String name; 
    public Animal(String name) { 
        this.name = name; 
    }
    public void introduce() { 
        System.out.println("Hello, everybody! My name is  " + name + ".");         
    } 
    public void eat() { 
        System.out.println("I am eating"); 
    }
    public void sleep() {
        System.out.println("I am sleeping");
    }
}

Mouse.java中的内容:

public class Mouse extends Animal { 
    public Mouse(String name) {
        super(name);
    }
    public void dig() {
        System.out.println("I am digging hole");
    }
}

Cat.java中的内容:

public class Cat extends Animal { 
    public Cat(String name) {
        super(name);
    }
    public void catchMouse() {
        System.out.println("I am catching mouse");
    }
}

AnimalTest.java中的内容:

public class AnimalTest { 
    public static void main(String[] args) {
        Mouse mouse = new Mouse("Jerry");
        mouse.introduce();
        mouse.eat();
        mouse.sleep();
        mouse.dig();
        System.out.println();
        Cat cat = new Cat("Tom");
        cat.introduce();
        cat.eat();
        cat.sleep();
        cat.catchMouse();
    }
}

运行结果:

分析: Java中父类的构造方法不能被子类继承,但可以被子类调用。 Mouse类和Cat类中的构造函数里的super(name)语句,就是调用父类的构造方法。

本文分享自微信公众号 - 海天一树(gh_de7b45c40e8b)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python3

python3--object类,继承与派生,super方法,钻石继承问题

{'kind': '波斯猫', 'name': '小黑', 'sex': '公'}

42710
来自专栏后端沉思录

hashCode、equals的使用

hash code、equals是Java用来比较对象是否相等,下面介绍一下自己在工作中对hash code、equals的使用. 首先介绍下String类中的...

9520
来自专栏女程序员的日常

Effective C++学习笔记之explicit

  explicit意思为“明确的”和“清楚的”,是C++的关键词,意在阻止隐式类型的转换;

10720
来自专栏海天一树

Java hashCode()与equals()的关联

一、Hash表数据结构介绍 请参考 哈希表详解 二、equals的内部实现 equals()的定义位于Object.class中: public boo...

35470
来自专栏木子昭的博客

Javascript实现完美继承实现javascript完美继承要考虑三个方面:

? 实现javascript完美继承要考虑三个方面: 第一步: 获取父构造函数体内的属性 解决方法: 通过 Father.call(this)实现(这里的t...

44260
来自专栏菩提树下的杨过

java学习:OOP入门

有c#基础的程序员,学习java其实很容易上手,绝大多数语法基本相同,概念也接近 1、属性 java中没有象c#中的Property概念,只有set,get方法...

20590
来自专栏个人随笔

Java 面向对象三大特征之一: 多态

多态与类型转换 子类重写父类方法  1)位置:子类和父类中有同名的方法  2)方法名相同,返回类型和修饰符相同,参数列表相同        方法体不同 多态...

41590
来自专栏java学习

面试题61(关于继承多态的理解)

面试题61 2018年1月21日 ? 本期题目 (单选题)下列选项中哪一个是正确的? package Wangyi; class Base{ publi...

31750
来自专栏程序员互动联盟

【java基础】Java extends用法详解

理解继承是理解面向对象程序设计的关键。在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。在Ja...

40580
来自专栏恰童鞋骚年

你必须知道的指针基础-7.void指针与函数指针

  void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。

25620

扫码关注云+社区

领取腾讯云代金券