首页 > 其他分享 >继承

继承

时间:2024-09-08 10:35:57浏览次数:6  
标签:继承 子类 class 父类 public Javabean

概述

封装: 对象代表什么, 就得封装对应的数据, 并提供数据对应的行为. 利用封装, 就可以把一些零散的数据和一些行为封装为一个整体, 这个整体就是对象.

假设现在要在方法当中打印学生的信息, 如果没有封装, 那么就要把这些零散的数据全部单独地传递给方法, 那么方法就要写很多很多的参数. 但是有了封装之后, 就可以将这些参数作为一个整体, 即对象传递给方法.

但是当这样的 Javabean 类越来越多之后, 问题就会出现了. 假设现在又有了第二个 Javabean 类去描述老师, 老师和学生这两个 Javabean 类有大量重复的代码. 于是可以将两个 Javabean 类中相同的代码全部抽取出来放到另一个位置, 这两个 Javabean 类共同取用这个位置的代码.

Java 中提供了一个关键字 extends,利用这个关键字,就可以让一个类和另一个类建立起继承关系。例如:

public class Student extends Person{}

Student 称为子类或派生类,Person 称为父类或基类、超类。

子类自动获得父类功能。

子类可以覆盖父类中的方法。覆盖的意思是子类重新定义继承下来的方法,以改变或延伸此方法的行为。

使用继承的好处:

  1. 可以把多个子类中重复的代码抽取到父类中,提高了代码的复用性。

  2. 子类可以在父类的基础上,增加其他的功能,使子类更强大。

关于继承最主要的需要学会的内容:

  1. 自己设计一个继承结构并将代码写出来。

  2. 学会使用别人已经写好的继承结构。

  3. 子类可以从父类中继承哪些内容?

  4. 继承中,成员变量的访问特点。

  5. 继承中,成员方法的访问特点。

  6. 继承中,构造方法的访问特点。

  7. This 和 super 的使用方法。

什么时候使用继承: 当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码。

继承的特点:Java 中只支持单继承,不支持多继承,单支持多层继承。

单继承:一个子类只能继承一个父类。

不支持多继承:子类不能同时继承多个父类。

多层继承:子类 A 继承父类 B,父类 B 可以继承自父类 C。C 是 A 的间接父类,B 是 A 的直接父类。

Java 中有一个最大的祖类,叫做 Object。这个类是 Java 提前写好的,每一个类都直接或间接继承自 Object。如果写了一个类,没有指定其继承自哪个类,就默认其直接继承自 Object 类。这是在虚拟机运行的时候自动帮我们加上去的, 如果当前类有父类, 那虚拟机不做其他操作, 如果当前类没有指定父类, 则虚拟机会自动增加一个 Object 类作为当前类的父类。

指定了父类的类间接继承自 Object 类。

当 Java 的类写得越来越多时,就形成了一个继承体系。在继承体系最上面的类就默认是继承自 Object 类,下面的所有的类都是间接地继承自 Object。在继承体系中,任何一个子类,既可以使用直接父类里面的内容,也可以使用间接父类里面的内容,但是不能使用类似于叔叔类的内容。

子类只能访问父类中非私有的成员, 即不是用 private 修饰的内容.

练习:

继承的练习(自己设计一个继承体系)

现在有四种动物:布偶猫、中国狸花猫、哈士奇、泰迪。

暂时不考虑属性,只要考虑行为。

请按照继承的思想特点进行继承体系的设计。

四种动物分别有以下的行为:

布偶猫:吃饭、喝水、抓老鼠

中国狸花猫:吃饭、喝水、抓老鼠

哈士奇:吃饭、喝水、看家、拆家

泰迪:吃饭、喝水、看家、蹭一蹭
思路:

采用画图法,从下往上画图,下面是子类,上面是父类,将子类中的共性内容抽取到父类中。

书写代码要从上往下写。

Javabean 类:

public class Animal {
    public void eat() {
        System.out.println("吃饭");
    }

    public void drink() {
        System.out.println("看家");
    }
}

Javabean 类:

public class Cat extends Animal {
    public void catchRat() {
        System.out.println("猫抓老鼠");
    }
}

Javabean 类:

public class Dog extends Animal {
    public void watchDoor() {
        System.out.println("狗在看家");
    }
}

Javabean 类:

public class RollCat extends Cat {

}

Javabean 类:

public class LiHua extends Cat {

}

Javabean 类:

public class Husky extends Dog {
    public void destroyHome() {
        System.out.println("哈士奇在拆家");
    }
}

Javabean 类:

public class Teddy extends Dog {
    public void touch() {
        System.out.println("泰迪在蹭一蹭");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        Husky h = new Husky();
        h.destroyHome();
        h.watchDoor();

        Teddy t=new Teddy();
        t.touch();

        LiHua lihua=new LiHua();
        lihua.catchRat();
    }
}

执行结果:

哈士奇在拆家
狗在看家
泰迪在蹭一蹭
猫抓老鼠

标签:继承,子类,class,父类,public,Javabean
From: https://www.cnblogs.com/Chengkai730/p/18402655

相关文章

  • C++继承基础
    虚函数默认实参C++默认实参是靠编译器实现的,因此默认实参不参与动态绑定,默认实参有静态类型决定。访问控制每个类分别控制自己的成员初始化过程,还分别控制其成员对于派生类来说是否可访问,友元不继承。成员:protected:派生类可见、自己、friend可见public:所有可见private:自己......
  • [C++ Daily] 虚继承与虚析构带来的变化
    虚继承在菱形继承中,若Student和Teacher继承于Person,TS继承于Student和Teacher,则构造TS时会调用两次Person的Construct和Destruct函数,若为虚继承,则不会出现上述问题(此类问题主要解决继承带来的多次非法delete)原继承:结果:虚继承:结果:虚析构父......
  • 《C++编程规范》五、类的设计与继承
    目录第32条弄清所要编写的是哪种类第32条弄清所要编写的是哪种类了解自我:有很多种不同的类。弄清楚要编写的是哪一种。不同种类的类适用于不同用途,因此遵循着不同的规则。值类(如std::pair,std::vector)模仿的是内置类型。一个值类应该:有一个公用析构函数、复制构造函......
  • C#继承和虚方法virtual
    C#继承和虚方法virtual在C#中,继承是一个重要的面向对象编程(OOP)特性,它允许您创建一个类(称为派生类或子类),该类继承另一个类(称为基类或父类)的属性和方法。继承提供了代码复用的机制,使得您可以扩展已有的类来创建新的类,同时保持原有类的功能。继承的基本概念基类(BaseClass):这是被......
  • Python中的继承艺术:解锁代码复用的无限可能
    在编程的世界里,代码复用一直是一个备受关注的话题。而Python,作为一门优雅且强大的编程语言,提供了多种方式来帮助我们实现这一目标。其中,“继承”作为面向对象编程的一个核心概念,在Python中扮演着至关重要的角色。它不仅能够简化代码结构,提高开发效率,还能增强程序的可维护性和可扩展......
  • 《C++中的面向对象编程三大特性:封装、继承与多态》
    在C++编程的广阔世界中,面向对象编程(Object-OrientedProgramming,OOP)的三大特性——封装、继承和多态,犹如三把强大的利器,帮助程序员构建出高效、可维护和可扩展的软件系统。本文将深入探讨如何在C++中实现这三大特性,并通过具体的代码示例展示它们的强大之处。一、封装(Enca......
  • Java体系中的继承
    前言#继承(Inheritance)是面向对象编程(OOP)中的一个重要概念,它允许一个类(称为子类或派生类)可以从另一个类(称为父类、基类或超类)继承属性(数据)和方法(行为)。简单来说继承主要用于实现共性的抽取,达到代码的复用。1继承1.1什么是继承Java中使用类对实体对象进行描述,而不同的......
  • PLC结构化文本(ST)——继承(inheritance)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——继承(inheritance)继承的概念继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。当创建一个类......
  • 11 Python面向对象编程:三大特性,封装、继承、多态
    本篇是Python系列教程第11篇,更多内容敬请访问我的Python合集1封装封装就是把类的公有属性改成私有属性,并且提供对外访问的方法。示例classMyClass:def__init__(self,value):self.__value=valuedefget_value(self):returnself.__......
  • Java 面向对象编程的四个基本原则(封装、继承、多态和抽象),并给出一个简单的例子说明如
    面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在Java中,面向对象编程的四个基本原则是封装、继承、多态和抽象。每个原则都有其特定的目标,帮助开发者构建更加模块化、可维护和可扩展的代码。封装封装是指将数据(属性)和行为(方法)捆绑在一起,并隐藏对象的具体实现细......