相信学过Java语言的小伙伴都熟悉super这个关键字,接下来,我们来研究他的一些基础用法吧。

定义名字为Father的类

package superkeyworld;public class Father {public String name;public int age;public Father() {}public Father(String name, int age) {this.name = name;this.age = age;System.out.println("父类构造方法调用了!");}public void sayHello() {System.out.println("你好,我是"+name);}
}

super关键字可以调用父类构造方法

当父类没有无参构造方法的时候,子类实例化的时候,必须显示调用父类的构造方法。

package superkeyworld;public class Child extends Father {public Child(String name, int age) {// 必须位于第一行。super(name, age);System.out.println("子类构造方法执行了");}
}

实例化Chlid类,结果如下:

父类构造方法调用了!
子类构造方法执行了!

为什么非得放在第一行?

super()之所以存在,是有很重要的原因的!因为子类与父类之间是继承关系,而继承就意味着得到父类中所有的成员变量和方法。既然能够得到父类的这些成员,也就意味着子类可以访问父类的方法和成员变量(当然,得到不意味着就可以任意使用,使用的前提是必须是有相应的访问权限) ,如果子类在使用父类成员的时候,父类内的成员变量没有得到正确的初始化,那么就会发生意想不到的错误,所以问题就出现在了这里,如何保证父类成员是安全的呢? 这就得保证父类得到了正确的初始化,而父类正确的初始化就离不开父类的构造函数,super存在的意义也正是如此。在子类的构造函数,如果没有显式使用super(),并且第一行没有使用this()调用子类其他的构造函数,那么编译器就会自动在第一行补齐super()来调用父类的默认构造函数,如果父类没有默认的构造函数就会报错。
super()在第一行的原因就是: 子类有可能访问了父类的成员变量或者方法,比如在构造函数中使用父类的成员函数或者变量,在代码块中使用了父类的方法等, 所以为保证在子类可以访问父类成员的正确性,所以要先完成对父类的初始化。

super关键字可以调用父类成员方法和成员变量(非私有)

super关键字可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字时也会覆盖父类的成员变量或方法,这个时候要想访问父类的成员变量或方法只能通过super关键字来访问,子类方法中的super.方法名()不需要位于第一行。

package superkeyworld;public class Child extends Father {public Child(String name, int age) {// 必须位于第一行。super(name, age);System.out.println("子类构造方法执行了!");}public void sayHello() {super.sayHello();System.out.println("父亲的年龄:"+super.age);System.out.println("调用父类的方法,获取了父类的属性!");}
}

调用子类的sayHello方法结果如下:

你好,我是feige
父亲的年龄:23
调用父类的方法,获取了父类的属性!

转载于:https://www.cnblogs.com/feiqiangsheng/p/11106125.html

Java8基础之super关键字相关推荐

  1. java基础之super关键字_繁星漫天_新浪博客

    在子类重写父类的方法后,子类对象将无法访问父类被重写的方法.为了解决这个问题,java中专门提供了一个super关键字用于访问父类的成员. 1.使用super关键字来调用父类的成员变量和成员方法 例子 ...

  2. JavaSE基础篇 | super关键字

    目录

  3. Java基础学习总结(8)——super关键字

    2019独角兽企业重金招聘Python工程师标准>>> 一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们 ...

  4. Java基础super关键字、final关键字、static关键字、匿名对象整理

    super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...

  5. Java基础之this关键字和super关键字区别

    this关键字和super关键字区别 » this关键字 ■ 代表当前这个对象 ■ this可以访问本类中的实例变量.实例方法也可以方法本类中的其他构造方法 ■ this还可以访问父类中的实例变量.实 ...

  6. JAVA知识基础(九):this、super 关键字总结

    1.this关键字 this有三种常见用法 1.this调用本类中的属性,也就是类中的成员变量 2.this调用本类中的其他方法 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行. 2 ...

  7. 黑马程序员_Java基础_this,super,static,final关键字

    一,this关键字 1,当成员变量和局部变量重名时,可以使用this关键字来区分. this关键字代表的是本类对象,this一般是在一个函数中,哪个对象在调用this所在的函数,this就代表哪个对象 ...

  8. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  9. Java super关键字

    super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...

最新文章

  1. c#中out和ref的使用区别 [转]
  2. opencv学习笔记8:类型转换
  3. 一键导出/备份「有道云笔记」工具
  4. mysql如何获取当前时间
  5. php while循环次数,php while循环得到循环次数
  6. x86_64的内存映射
  7. 【华为云技术分享】Nginx应用调优案例
  8. 利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM
  9. 小记一下:CentOS里用多个iso镜像安装Xen虚拟机
  10. Linux Interrupt——魅族内核大神文章
  11. mysql中如何复制数据表_MySQL中快速复制数据表方法汇总
  12. html加拼音注释,古诗加拼音注释版.doc
  13. CCF系列题解--2015年9月第二题 日期计算
  14. 仓库盘点好方法,使用安卓盘点机PDA扫描商品条码进行超市盘点
  15. TS中的方法重载,函数重载,构造器重载
  16. SH7001单电池恒压线性充电IC
  17. 站群代做关键词排名出技术
  18. python 安装module
  19. 输入一个url到浏览器页面展示都经历了哪些过程
  20. 基于大数据的英语学习利器

热门文章

  1. timed_waiting线程是否占用cpu_程序CPU占用率飙升,如何定位线程的堆栈信息?超详细,值得收藏看不懂还有配套视频 第319篇...
  2. 《Java 高并发》04 线程的基本操作
  3. saej1929_(1929年-2020年)
  4. LifeCycle源码解读
  5. 乌班图系统16.04安装
  6. 自动化测试基础篇--Selenium浏览器操作
  7. 物化视图VS普通视图
  8. python 测试框架
  9. C#摄像头实现拍照功能的简单代码示例
  10. Cacti迁移RRA数据迁移脚本