Java面向对象关键字extends继承详解

news/2024/7/4 1:45:34 标签: java, 面向对象编程, , class, 多态
class="baidu_pl">
class="article_content clearfix">
class="markdown_views prism-github-gist">

class="toc">

文章目录

  • 一、 问题引出
  • 二、继承extends
      • 2.1 继承的用法
        • 2.2 基本语法
        • 2.3继承的好处
        • 2.4继承性

一、 问题引出

面向对象的编程思想使得代码中创建的class="tags" href="/tags/Lei.html" title=类>类更加具体,他们都有各自的属性,方法。有的时候一些客观事物之前存在一些联系,那么他们在代码中的具体class="tags" href="/tags/Lei.html" title=类>类也存在一些联系。
例如:设计一个动物class="tags" href="/tags/Lei.html" title=类>类

class="prism language-class="tags" href="/tags/JAVA.html" title=java>java">class="token keyword">public class="token keyword">class class="token class-name">Animal class="token punctuation">{
     class="token keyword">public class="token class-name">String nameclass="token punctuation">;
     class="token keyword">public class="token keyword">int ageclass="token punctuation">;
    class="token keyword">public class="token class-name">Animalclass="token punctuation">(class="token class-name">String nameclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.name class="token operator">= nameclass="token punctuation">;
    class="token punctuation">}
     class="token keyword">public class="token class-name">Animalclass="token punctuation">(class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">public class="token keyword">void class="token function">eatclass="token punctuation">(class="token punctuation">)class="token punctuation">{
        class="token class-name">Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token keyword">thisclass="token punctuation">.nameclass="token operator">+class="token string">"吃东西"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

这个动物class="tags" href="/tags/Lei.html" title=类>类有自己的name,age属性和eat方法
我们又想创建一个猫class="tags" href="/tags/Lei.html" title=类>类和狗class="tags" href="/tags/Lei.html" title=类>类

class="prism language-class="tags" href="/tags/JAVA.html" title=java>java">class="token keyword">class cat class="token punctuation">{
    class="token keyword">public  class="token class-name">String nameclass="token punctuation">;
    class="token keyword">public  class="token keyword">int ageclass="token punctuation">;
    class="token keyword">public class="token function">catclass="token punctuation">(class="token class-name">String nameclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.name class="token operator">= nameclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">public class="token function">catclass="token punctuation">(class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">public class="token keyword">void class="token function">eatclass="token punctuation">(class="token punctuation">)class="token punctuation">{
        class="token class-name">Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token keyword">thisclass="token punctuation">.nameclass="token operator">+class="token string">"吃饭"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}
class="token keyword">class dogclass="token punctuation">{
    class="token keyword">public  class="token class-name">String nameclass="token punctuation">;
    class="token keyword">public class="token keyword">int ageclass="token punctuation">;

    class="token keyword">public class="token function">dogclass="token punctuation">(class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
    class="token punctuation">}

    class="token keyword">public class="token function">dogclass="token punctuation">(class="token class-name">String nameclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.name class="token operator">= nameclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">public  class="token keyword">void  class="token function">eatclass="token punctuation">(class="token punctuation">)class="token punctuation">{
        class="token class-name">Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token keyword">thisclass="token punctuation">.nameclass="token operator">+class="token string">"干饭"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

由于大家都是碳基生物,你要吃饭我也要吃饭,你有名字我也有名字,也都有自己的年龄,我们在创建其他class="tags" href="/tags/Lei.html" title=类>类的时候还需要在写一遍他们的属性name,age,和方法eat。并且,从逻辑上来说猫和狗都属于动物。这就造成了大量重复的代码,那有没有什么办法能让我不用把这些属性。方法在写一遍呢?
在这里插入图片描述

继承:我来啦!!!

继承作为class="tags" href="/tags/MianXiangDuiXiangBianCheng.html" title=面向对象编程>面向对象编程的一个非常重要的关键字,在C++,和Java当中都可以使用它来减少代码冗余。顾名思义,它可以让一个子class="tags" href="/tags/Lei.html" title=类>类继承另一个父class="tags" href="/tags/Lei.html" title=类>类,就像儿子继承爸爸的财产一样,继承后的子class="tags" href="/tags/Lei.html" title=类>类可以拥有父class="tags" href="/tags/Lei.html" title=类>类的方法,属性,这样每次在定义动物class="tags" href="/tags/Lei.html" title=类>类完之后,在想要定义狗或者猫class="tags" href="/tags/Lei.html" title=类>类的时候就不用再把多余的代码写一遍了。我们来看看效果。


二、继承extends

2.1 继承的用法

class="tags" href="/tags/Lei.html" title=类>类extends父class="tags" href="/tags/Lei.html" title=类>类即可

class="prism language-class="tags" href="/tags/JAVA.html" title=java>java">class="token keyword">class cat class="token keyword">extends animalclass="token punctuation">{
    class="token keyword">public class="token function">catclass="token punctuation">(class="token class-name">String nameclass="token punctuation">) class="token punctuation">{
        class="token keyword">superclass="token punctuation">(nameclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">public class="token function">catclass="token punctuation">(class="token keyword">int ageclass="token punctuation">)class="token punctuation">{
        class="token keyword">superclass="token punctuation">(ageclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">public  class="token keyword">void class="token function">catchMouceclass="token punctuation">(class="token punctuation">)class="token punctuation">{
        class="token class-name">Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token keyword">thisclass="token punctuation">.nameclass="token operator">+class="token string">"抓老鼠"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}
class="token keyword">class dog class="token keyword">extends animalclass="token punctuation">{
    class="token keyword">public class="token function">dogclass="token punctuation">(class="token class-name">String nameclass="token punctuation">) class="token punctuation">{
        class="token keyword">superclass="token punctuation">(nameclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}

    class="token keyword">public class="token function">dogclass="token punctuation">(class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
        class="token keyword">superclass="token punctuation">(ageclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">public  class="token keyword">void class="token function">defenceclass="token punctuation">(class="token punctuation">)class="token punctuation">{
        class="token class-name">Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token keyword">thisclass="token punctuation">.nameclass="token operator">+class="token string">"看家"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}


在上面的代码中,cat,dog被称为子class="tags" href="/tags/Lei.html" title=类>类、派生class="tags" href="/tags/Lei.html" title=类>类,而animal被称为父class="tags" href="/tags/Lei.html" title=类>类或者超class="tags" href="/tags/Lei.html" title=类>类,extends英文意思为扩展,这里可以理解成继承,例如我们写的catclass="tags" href="/tags/Lei.html" title=类>类有了抓老鼠的方法,dogclass="tags" href="/tags/Lei.html" title=类>类有了看家的方法。继承可以让子class="tags" href="/tags/Lei.html" title=类>类拥有父class="tags" href="/tags/Lei.html" title=类>类public修饰的属性和方法,cat、dogclass="tags" href="/tags/Lei.html" title=类>类就继承了animalclass="tags" href="/tags/Lei.html" title=类>类的name、age属性以及eat方法。

2.2 基本语法

使用 extends 指定父class="tags" href="/tags/Lei.html" title=类>类.
class="tags" href="/tags/Lei.html" title=类>类会继承父class="tags" href="/tags/Lei.html" title=类>类的所有 public 的字段和方法.
对于父class="tags" href="/tags/Lei.html" title=类>类的 private 的字段和方法, 子class="tags" href="/tags/Lei.html" title=类>类中是无法访问的.
class="tags" href="/tags/Lei.html" title=类>类的实例中, 也包含着父class="tags" href="/tags/Lei.html" title=类>类的实例. 可以使用 super 关键字得到父class="tags" href="/tags/Lei.html" title=类>类实例的引用
class="tags" href="/tags/Lei.html" title=类>类继承父class="tags" href="/tags/Lei.html" title=类>类之后,还可以声明自己特有的属性和方法,实现功能的拓展。

2.3继承的好处

1:减少代码的冗余,提高复用性。
2:便于功能的拓展
3:为多态提供了前提。

2.4继承性

Java各种class="tags" href="/tags/Lei.html" title=类>类互相继承的属性称作继承性,继承性有一些规定。
1:一个class="tags" href="/tags/Lei.html" title=类>类可以被多个子class="tags" href="/tags/Lei.html" title=类>类继承。
2:Java的单继承性:一个子class="tags" href="/tags/Lei.html" title=类>类只能继承一个父class="tags" href="/tags/Lei.html" title=类>类。比如一个儿子只能有一个亲爸爸,一个爸爸可以有好几个儿子。在C++,和python中支持多继承
3:如果一个class="tags" href="/tags/Lei.html" title=类>类没有说明一个class="tags" href="/tags/Lei.html" title=类>类的父class="tags" href="/tags/Lei.html" title=类>类的话,那么此class="tags" href="/tags/Lei.html" title=类>类继承于class="tags" href="/tags/JAVA.html" title=java>java.lang.Objectclass="tags" href="/tags/Lei.html" title=类>类
4:所以的class="tags" href="/tags/Lei.html" title=类>类(除了class="tags" href="/tags/JAVA.html" title=java>java.lang.Object)都间接或直接的继承class="tags" href="/tags/JAVA.html" title=java>java.lang.Objectclass="tags" href="/tags/Lei.html" title=类>类。那么就意味这所有的class="tags" href="/tags/Lei.html" title=类>类都具有class="tags" href="/tags/JAVA.html" title=java>java.lang.Objectclass="tags" href="/tags/Lei.html" title=类>类声明的功能。


在这里插入图片描述


http://www.niftyadmin.cn/n/1697698.html

相关文章

Linux之特殊权限详解:SUID、SGID、SBIT

特殊权限的介绍Set UID当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?1、SUID权限仅对二进…

我总结了常见的基于比较的排序,通俗易懂(一)

) 文章目录一、常见排序总览二、排序的稳定性三、直接插入排序3.1实现思路:3.2 动态图3.3:代码实现3.4时空间复杂度四、希尔排序4.1与直接插入排序的联系4.2:实现思路4.3:代码实现4.4:时空间复杂度五、选择排序5.1&…

【CUDA 基础】4.2 内存管理

title: 【CUDA 基础】4.2 内存管理 categories: - CUDA - Freshman tags: - CUDA内存管理 - CUDA内存分配和释放 - CUDA内存传输 - 固定内存 - 零拷贝内存 - 统一虚拟寻址 - 统一内存寻址 toc: true date: 2018-05-01 21:39:47 Abstract: 本文主要介绍CUDA内存管理,…

Office EXCEL VBA数组如何使用

Excel VBA数组入门教程 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。 2. 数组的维数: Sub 数组示例() Dim x As Long, y As Long Dim arr(1 To 10, 1 To 3) 创建一个可以容下10行3列的数组空间 For x 1 To 4 For y …

剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会

这里写目录标题一、 哈希表统计次数14行通过,简单易懂二、题目信息三、解题思路四、代码五、提交结束一、 哈希表统计次数14行通过,简单易懂 二、题目信息 三、解题思路 利用哈希表K,V的特性遍历每一个数字,K是数字的值,V是这个数…

MindManager使用技巧

任务窗格在右下角。 1.条件的设置与编辑 2.优先级视图 不是优先级图标 3.圆圈图 4.洋葱图的使用 右键选择背景再选择解锁所有背景就可以对所有圆形进行调整了 点图形边缘出现十字架可以进行移动 5.个性化旅行表制作 新建里找到个人效率模版 然后选择差旅计划 6.链接的使用 7.云…

新学期预习吗? 数据结构集合框架及Colletcion接口实例详解

) 文章目录一、集合框架介绍二、Collection接口常用方法2.1、 增加一个元素2.2、如果e出现在集合里,删除其中一个。2.3 、判空方法2.4、获取当前集合的元素2.5、toArray方法2.6、是否包含某元素2.7、删除所有集合元素三、Collecion实例四、结尾一、集合框架介绍 Jav…

php 实现将文本、图片写到同一张图上面以及文本的自动换行

以laravel框架为例: 首先controller中引用ImageManager; use Intervention\Image\ImageManager; 下面就是关键处理, $date date(Y年m月d日 H:i, $data[time]);$title $data[title];$content $data[content];$id $data[id]; //原图地址-画…