JavaSE面向对象(五)-继承(一)
  eZw8kcl3fQWu 2023年11月19日 14 0



文章目录

  • 1.继承的概念
  • 1.1.生活中的继承
  • 1.2.程序中的继承
  • 2.为什么需要继承
  • 2.1.案例引入
  • 2.2.抽取父类
  • 2.3.继承的作用
  • 3.继承的使用
  • 4.继承-子类中访问父类成员变量特点
  • 5.继承-子类中访问父类成员方法特点
  • 6.继承特点


1.继承的概念

1.1.生活中的继承

  • 生活中的“继承”是施方的一种赠与,受方的一种获得。
  • 将一方所拥有的东西给予另一方。

JavaSE面向对象(五)-继承(一)_Java核心技术

1.2.程序中的继承

继承是面向对象软件技术中的一个概念。它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

Java语言是非常典型的面向对象的语言,在Java语言中继承就是子类继承父类的属性和方法,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的方法。父类有时也叫基类、超类;子类有时也被称为派生类。

我们来举个例子:我们知道动物有很多种,是一个比较大的概念。在动物的种类中,我们熟悉的有猫(Cat)、狗(Dog)等动物,它们都有动物的一般特征(比如能够吃东西,能够发出声音),不过又在细节上有区别(不同动物的吃的不同,叫声不一样)。在Java语言中实现Cat和Dog等类的时候,就需要继承Animal这个类。继承之后Cat、Dog等具体动物类就是子类,Animal类就是父类。

JavaSE面向对象(五)-继承(一)_面向对象_02

继承满足一个is a 特性

JavaSE面向对象(五)-继承(一)_Java编程_03

2.为什么需要继承

2.1.案例引入

接下来我们通过实例来说明这个需求。开发动物类,其中动物分别为企鹅以及老鼠,要求如下:

狗类:属性(姓名,年龄,品种),方法(吃,看门)
猫类:属性(姓名,年龄,命数),方法(吃,爬树)
  • 狗类
public class Dog {

    private String name; //姓名
    private int age; //年龄
    private String breed; //品种

    public void eat(){
        System.out.println("吃东西!");
    }

    public void watchDoor(){
        System.out.println("我可以看门");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getBreed() {
        return breed;
    }

    public void setBreed(String breed) {
        this.breed = breed;
    }
}
  • 猫类
public class Cat {

    private String name; //姓名
    private int age; //年龄
    private int live; //命的条数

    public void eat() {
        System.out.println("猫吃东西!");
    }

    public void climbTree() {
        System.out.println("我可以爬树");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    public int getLive() {
        return live;
    }

    public void setLive(int live) {
        this.live = live;
    }
}

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

2.2.抽取父类

JavaSE面向对象(五)-继承(一)_开发语言_04

2.3.继承的作用

  • 继承就是把子类中共有的属性或者方法抽出去,提取到一个共有的类中(父类),把子类特有的属性和方法,保留在子类中。让子类继承父类!
- 将重复代码抽取到父类中,减少代码的重复
- 使得程序更加方便扩展

3.继承的使用

  • extends关键字用作类的继承

JavaSE面向对象(五)-继承(一)_Java编程_05

  • 动物类
public class Animal {

    private String name; //姓名
    private int age; //年龄

    public void eat() {
        System.out.println("吃东西!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 猫类
public class Cat {

    private int live; //命的条数

    public void climbTree() {
        System.out.println("我可以爬树");
    }

    public int getLive() {
        return live;
    }

    public void setLive(int live) {
        this.live = live;
    }
}
  • 狗类
public class Dog {

    private String breed; //品种

    public void watchDoor(){
        System.out.println("我可以看门");
    }

    public String getBreed() {
        return breed;
    }

    public void setBreed(String breed) {
        this.breed = breed;
    }
}
  • 测试类
public class TestAnimal {

    public static void main(String[] args) {

        Cat cat=new Cat();
        cat.setName("花花");
        cat.setAge(3);
        cat.setLive(9);
        cat.eat(); //吃东西
        cat.climbTree();//爬树

        Dog d = new Dog();
        d.setName("旺财");
        d.setAge(4);
        d.setBreed("牧羊犬");

        d.eat();  //吃东西
        d.watchDoor(); //看门
    }
}

4.继承-子类中访问父类成员变量特点

了解了继承给我们带来的好处,提高了代码的复用性。继承让类与类或者说对象与对象之间产生了关系。那么,当继承出现后,类的成员之间产生了那些变化呢?

重点学习成员变量、成员方法的变化。

看如下代码:

package com.it.demo12;

class Fu {
    //Fu中的成员变量。
    int num = 5;
}

class Zi extends Fu {
    //Zi中的成员变量
    int num2 = 6;

    //Zi中的成员方法
    public void show() {
        //访问父类中的num
        System.out.println("Fu num=" + num);
        //访问子类中的num2
        System.out.println("Zi num2=" + num2);
    }
}

class Demo {
    public static void main(String[] args) {
        Zi z = new Zi(); //创建子类对象
        System.out.println(z.num2);
        z.show(); //调用子类中的show方法
    }
}

代码说明:Fu类中的成员变量是非私有的,子类中可以直接访问,若Fu类中的成员变量私有了,子类是不能直接访问的。

5.继承-子类中访问父类成员方法特点

当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。

class Fu {
    public void show() {
        System.out.println("Fu类中的show方法执行");
    }
}

class Zi extends Fu {
    public void show2() {
        System.out.println("Zi类中的show2方法执行");
    }
}

public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show(); //子类中没有show方法,但是可以找到父类方法去执行
        z.show2();
    }
}

6.继承特点

  • Java只支持单继承:就一个子类 只能最多直接继承一个父类
  • JavaSE面向对象(五)-继承(一)_Java编程_05

  • Java支持多层继承,继承传递
  • JavaSE面向对象(五)-继承(一)_Java_07

  • 父类定义了继承树中共性内容,子类定义了该类个性内容。

JavaSE面向对象(五)-继承(一)_Java编程_08


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
eZw8kcl3fQWu