首页 > 编程语言 >Java中的继承

Java中的继承

时间:2023-04-15 23:31:35浏览次数:38  
标签:Java 继承 void 局部变量 class int extends public

Java中的继承_extends和super关键字

先看一段代码:

class A {
  public int x;
}
class B {
  public void pri() {
    System.out.println(x);
  }
}

请问这时候调用x,可以得到值么?

答案是否定的,因为x在A这个类当中,而这个A类和B类毫不相干,B类中没有x这个变量,所有代码会出现编译错误,但是通过继承,就可以访问的到A类里的x。

大家伙儿提到继承,请问最先想到的是什么?

继承皇位?还是继承花呗?(当然是开个玩笑,哈哈)Java中的继承_extends和super关键字_02

其实Java里面的继承和我所说的也有异曲同工之妙,也是把“父辈”的东西拿过来用,不过自己有的话,肯定就不能找父亲了,不然面子上挂不住是吧。换句话说也就是c语言里面的就近原则——全局变量和局部变量相同,优先使用局部变量。

那有些人就很倔,就是要在B里面访问A(就比如我们的Java之父,高斯林老爷子),那怎么办呢?Java中的继承_父子类_03

所以就有了我们继承的关键字:<extends>,中文翻译就是延伸,只要把这个加在B类的后面,那就可以使用x了,如下:

class A {
  public int x;
}
class B extends A {
  public void pri() {
    System.out.println(x);
  }
}

这样就可以访问x这个变量了。

那还有个问题,局部变量和全局变量相同怎么办?比如下面这种

class A {
  public int x = 10;
}
class B extends A {
  public void pri(int x) {
    x = x;
    System.out.println(x);
  }
}

出现这种情况,想都不用想,只要看过我上一篇博客,或者说真正明白了就近原则,就知道这个x输出的是局部变量x,根本不是A类里的x,赋值也是赋在局部变量x这里的,那如果说要访问A类里的x,要引用就<super>这个关键字了,如下:

class A {
  public int x = 10;
}
class B extends A {
  public void pri(int x) {
    super.x = x;
    System.out.println(super.x);
  }
}

这样子说明前面的x是父类的x,就不会搞混淆了。

下期介绍super关键字,你们的支持就是我的最大动力。Java中的继承_Java_04

标签:Java,继承,void,局部变量,class,int,extends,public
From: https://blog.51cto.com/u_15880518/6192521

相关文章

  • java: 程序包org.springframework.web.bind.annotation不存在(已解决)
    今天在创建了一个新的SpringBoot模块后,和往常一样将文件从别的模块中复制过来,然后运行鑫模块就报错了:java:程序包org.springframework.web.bind.annotation不存在,第一反应是将文件所在的包Rebuild一下,但是这次并没有起到作用。然后就想着清除一下缓存,进行步骤:File-->Invalidat......
  • javascript基础练习
     本练习根据w3cschool:https://www.w3cschool.cn/javascript/javascript-conventions.html 1.javascript简介1.1JavaScript是脚本语言JavaScript是一种轻量级的编程语言。JavaScript是可插入HTML页面的编程代码。JavaScript插入HTML页面后,可由......
  • Java NIO
       Server服务端importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.SelectableChannel;importjava.nio.channels.SelectionKey;importjava.nio.channels.Selector;importjava.nio.channels.Ser......
  • JavaWeb
    本篇文章是我在学习尚硅谷的JavaWeb视频视频做的学习笔记,尚硅谷的JavaWeb视频讲的很详细,欢迎去观看https://www.bilibili.com/video/BV1Y7411K7zz/?spm_id_from=333.337.search-card.all.click&vd_source=f38047c43021f07cf7a4e84b564bde02目录一、HTML和CSS1.1B/S软件的结构1......
  • Java | 一分钟掌握JDK命令行工具 | 3 - 实战
     作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我!前言前一篇Java|一分钟掌握JDK命令行工具|2-分类-掘金(juejin.cn)罗列了一些JDK命令行工具,我们没有必要把所有命令行工具全部介绍,那样对于开发者来说不实用也......
  • java字节码编程技术(8/10) -Javassist
    Javassist这个库和asm经常使用,它的性能稍差一点<dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.27.0-GA</version></dependency>获取一个类加载器(ClassLoader),以加载指定的.jar或.class文件privateClassLoade......
  • java.lang.NoSuchMethodException: com.innovation.web.BuyServlet.get(javax.servlet
    问题描述我将路径定义到相应的servlet的函数方法里面,然后就出现了这个问题,很明显的找不到相应的函数方法;问题解决将目光重新放到我定义的相关路径那里,发现我出于习惯,将servlet里面原本应该是名为checkIt的函数方法写成了get方法,改回去之后,这个问题也就解决啦!......
  • Java Stream API 操作完全攻略:让你的代码更加出色 (四)
    前言  JavaStream是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用Stream操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍JavaStream操作的所有方面,包括range、range、iterate、generate等操作,让你的代码行......
  • eclpise断点调试Java代码
    Eclipse支持对Java代码进行Debug也就是在执行代码时暂停执行并可以观察相关的信息,比如栈中的变量,堆中的变量,执行的代码,方法调用栈等,这个暂停的位置就是断点一个简单的工程如果需要观察getMax方法的执行,可以在代码编辑器左边缘双击,增加断点,或者右键ToggleBre......
  • java -- 标记接口
    标记接口标记接口(MarkerInterface),又称标签接口(TagInterface)仅代表一个标记不包含任何方法标记接口是用来判断某个类是否具有某种能力Cloneable标记接口此类实现了Cloneable接口,以指示Object.clone方法可以合法地对该类实例进行按字段复制如果在没有实现Cloneable接......