Java的super关键字

步骤 1 : 准备一个显式提供无参构造方法的父类

准备显式提供无参构造方法的父类

在实例化Hero对象的时候,其构造方法会打印

“Hero的构造方法 "

  1. package charactor;
  2. import property.Item;
  3. public class Hero {
  4. String name; //姓名
  5. float hp; //血量
  6. float armor; //护甲
  7. int moveSpeed; //移动速度
  8. public void useItem(Item i){
  9. System.out.println("hero use item");
  10. i.effect();
  11. }
  12. public Hero(){
  13. System.out.println("Hero的构造方法 ");
  14. }
  15. public static void main(String[] args) {
  16. new Hero();
  17. }
  18. }

步骤 2 : 实例化子类,父类的构造方法一定会被调用

实例化一个ADHero(), 其构造方法会被调用

其父类的构造方法也会被调用

并且是父类构造方法先调用

子类构造方法会默认调用父类的 无参的构造方法

  1. package charactor;
  2. public class ADHero extends Hero implements AD{
  3. @Override
  4. public void physicAttack() {
  5. System.out.println("进行物理攻击");
  6. }
  7. public ADHero(){
  8. System.out.println("AD Hero的构造方法");
  9. }
  10. public static void main(String[] args) {
  11. new ADHero();
  12. }
  13. }

步骤 3 : 父类显式提供两个构造方法

分别是无参的构造方法和带一个参数的构造方法

  1. package charactor;
  2. import property.Item;
  3. public class Hero {
  4. String name; //姓名
  5. float hp; //血量
  6. float armor; //护甲
  7. int moveSpeed; //移动速度
  8. public void useItem(Item i){
  9. System.out.println("hero use item");
  10. i.effect();
  11. }
  12. public Hero(){
  13. System.out.println("Hero的无参的构造方法 ");
  14. }
  15. public Hero(String name){
  16. System.out.println("Hero的有一个参数的构造方法 ");
  17. this.name = name;
  18. }
  19. public static void main(String[] args) {
  20. new Hero();
  21. }
  22. }

步骤 4 : 子类显式调用父类带参构造方法

使用关键字super 显式调用父类带参的构造方法

  1. package charactor;
  2. public class ADHero extends Hero implements AD{
  3. @Override
  4. public void physicAttack() {
  5. System.out.println("进行物理攻击");
  6. }
  7. public ADHero(String name){
  8. super(name);
  9. System.out.println("AD Hero的构造方法");
  10. }
  11. public static void main(String[] args) {
  12. new ADHero("德莱文");
  13. }
  14. }

步骤 5 : 调用父类属性

通过super调用父类的moveSpeed属性

ADHero也提供了属性moveSpeed

  1. public int getMoveSpeed(){
  2. return this.moveSpeed;
  3. }
  4. public int getMoveSpeed2(){
  5. return super.moveSpeed;
  6. }
  7. package charactor;
  8. public class ADHero extends Hero implements AD{
  9. int moveSpeed=400; //移动速度
  10. @Override
  11. public void physicAttack() {
  12. System.out.println("进行物理攻击");
  13. }
  14. public int getMoveSpeed(){
  15. return this.moveSpeed;
  16. }
  17. public int getMoveSpeed2(){
  18. return super.moveSpeed;
  19. }
  20. public static void main(String[] args) {
  21. ADHero h= new ADHero();
  22. System.out.println(h.getMoveSpeed());
  23. System.out.println(h.getMoveSpeed2());
  24. }
  25. }

步骤 6 : 调用父类方法

ADHero重写了useItem方法,并且在useItem中通过super调用父类的useItem方法

  1. package charactor;
  2. import property.Item;
  3. import property.LifePotion;
  4. public class ADHero extends Hero implements AD {
  5. int moveSpeed = 400; // 移动速度
  6. @Override
  7. public void physicAttack() {
  8. System.out.println("进行物理攻击");
  9. }
  10. public int getMoveSpeed() {
  11. return this.moveSpeed;
  12. }
  13. public int getMoveSpeed2() {
  14. return super.moveSpeed;
  15. }
  16. // 重写useItem,并在其中调用父类的userItem方法
  17. public void useItem(Item i) {
  18. System.out.println("adhero use item");
  19. super.useItem(i);
  20. }
  21. public static void main(String[] args) {
  22. ADHero h = new ADHero();
  23. LifePotion lp = new LifePotion();
  24. }
  25. }

练习super

父类Hero提供了一个有参的构造方法:

  1. public Hero(String name){
  2. this.name = name;
  3. }

但是没有提供无参的构造方法

子类应该怎么处理?

  1. package charactor;
  2. public class Hero {
  3. public String name;
  4. protected float hp;
  5. public Hero(String name){
  6. this.name = name;
  7. }
  8. // 故意不提供无参的构造方法
  9. // public Hero(){
  10. //
  11. // }
  12. public static void main(String[] args) {
  13. }
  14. }

Java自学-接口与继承 super的更多相关文章

  1. Java自学-接口与继承 接口

    设计Java的接口 在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击 这时候,就可以使用接口来实现这个效果. 接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们 ...

  2. Java自学-接口与继承 抽象类

    Java 抽象类 在类中声明一个方法,这个方法没有实现体,是一个"空"方法 这样的方法就叫抽象方法,使用修饰符"abstract" 当一个类有抽象方法的时候,该 ...

  3. Java自学-接口与继承 对象转型

    Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是A ...

  4. Java自学-接口与继承 UML图

    UML 图 步骤 1 : UML 图 -- 类之间的关系 UML-Unified Module Language 统一建模语言,可以很方便的用于描述类的属性,方法,以及类和类之间的关系 步骤 2 : ...

  5. Java自学-接口与继承 默认方法

    默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法 Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现 ...

  6. Java自学-接口与继承 内部类

    Java 内部类 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤 1 : 非静态内部类 非静态内部类 BattleScore "战斗成绩" 非静态内部类可以直接在 ...

  7. Java自学-接口与继承 final

    Java的修饰符final final修饰类,方法,基本类型变量,引用的时候分别有不同的意思. 示例 1 : final修饰类 当Hero被修饰成final的时候,表示Hero不能够被继承 其子类会出 ...

  8. Java自学-接口与继承 Object类

    Java中的超类 Object 步骤 1 : Object类是所有类的父类 声明一个类的时候,默认是继承了Object public class Hero extends Object package ...

  9. Java自学-接口与继承 多态

    Java的多态 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父类引用指向子类对象 示例 1 : 操作符的多态 同一个操作符在不同情境下,具备不同的作用 如果+号两侧都是整型,那么 ...

随机推荐

  1. 关于python切片操作笔记

    一. Python可切片对象的索引方式 包括:正索引和负索引两部分,如下图所示,以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:   python索引方式.jpg 二. P ...

  2. 微信公众平台iPhone版内测开始了

    5月9日晚些时候自媒体人收到了微信公众平台iPhone版的内测邀请,微信公众平台iPhone版可在手机上写图文,快速查看并回复粉丝消息.留言和赞赏,新建群发.查看群发历史和今日数据,这些功能很实用了, ...

  3. views视图

    1.request.POST.get('.......')    --radio       单选框 get()方法  从HTML中提取发过来的数据 1. 2. 3. 4. 2.request.POS ...

  4. Andriod Studio安装及使用

    创建Andriod项目 1.下载最新版的Andriod studio 2.在 Welcome to Android Studio 窗口中,点击 Start a new Android Studio p ...

  5. 一个小问题 关于 com.mysql.jdbc.PacketTooBigException: Packet for query is too large

    这个错本身就是应为传输的数据大于mysql的max_allowed_packet参数默认值造成的: 之前遇到这个问题,一直是改max_allowed_packet的值 ,做项目遇到这个错误改了好几次, ...

  6. Codeforces Round #603 (Div. 2) E - Editor(线段树,括号序列)

  7. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块(Air202,SIM800)AT指令TCP透传方式,MQTT通信控制升级

    实现功能概要 这节和上一节的功能一样(只不过上节是利用Wi-Fi模块,这节是利用GPRS模块) 用户程序里面加入MQTT通信,执行用户程序的时候, 通过接收MQTT的升级命令实现升级. 凡是可以实现M ...

  8. [PHP] Laravel使用redis保存SESSION

    Laravel使用redis保存SESSION 首先确认服务器已经安装redis服务,php安装了redis扩展. 1.打开config/database.php.在redis配置项中增加sessio ...

  9. python3 ini文件读写

    import configparser config = configparser.ConfigParser() file = 'config.ini' config.read(file) confi ...

  10. 解析node-cors模块

    (function () { 'use strict'; var assign = require('object-assign'); var vary = require('vary'); var ...