Java的super关键字

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

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

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

“Hero的构造方法 "

package charactor;

import property.Item;

public class Hero {

    String name; //姓名

    float hp; //血量

    float armor; //护甲

    int moveSpeed; //移动速度

    public void useItem(Item i){
System.out.println("hero use item");
i.effect();
} public Hero(){
System.out.println("Hero的构造方法 ");
} public static void main(String[] args) {
new Hero();
} }

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

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

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

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

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

package charactor;

public class ADHero extends Hero implements AD{

    @Override
public void physicAttack() {
System.out.println("进行物理攻击");
} public ADHero(){ System.out.println("AD Hero的构造方法");
} public static void main(String[] args) { new ADHero(); } }

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

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

package charactor;

import property.Item;

public class Hero {

    String name; //姓名

    float hp; //血量

    float armor; //护甲

    int moveSpeed; //移动速度

    public void useItem(Item i){
System.out.println("hero use item");
i.effect();
} public Hero(){
System.out.println("Hero的无参的构造方法 ");
} public Hero(String name){
System.out.println("Hero的有一个参数的构造方法 ");
this.name = name;
} public static void main(String[] args) {
new Hero();
} }

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

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

package charactor;

public class ADHero extends Hero implements AD{

    @Override
public void physicAttack() {
System.out.println("进行物理攻击");
} public ADHero(String name){
super(name);
System.out.println("AD Hero的构造方法");
} public static void main(String[] args) {
new ADHero("德莱文");
} }

步骤 5 : 调用父类属性

通过super调用父类的moveSpeed属性

ADHero也提供了属性moveSpeed

public int getMoveSpeed(){
return this.moveSpeed;
} public int getMoveSpeed2(){
return super.moveSpeed;
}
package charactor; public class ADHero extends Hero implements AD{ int moveSpeed=400; //移动速度 @Override
public void physicAttack() {
System.out.println("进行物理攻击");
} public int getMoveSpeed(){
return this.moveSpeed;
} public int getMoveSpeed2(){
return super.moveSpeed;
} public static void main(String[] args) {
ADHero h= new ADHero(); System.out.println(h.getMoveSpeed());
System.out.println(h.getMoveSpeed2()); } }

步骤 6 : 调用父类方法

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

package charactor;

import property.Item;
import property.LifePotion; public class ADHero extends Hero implements AD { int moveSpeed = 400; // 移动速度 @Override
public void physicAttack() {
System.out.println("进行物理攻击");
} public int getMoveSpeed() {
return this.moveSpeed;
} public int getMoveSpeed2() {
return super.moveSpeed;
} // 重写useItem,并在其中调用父类的userItem方法
public void useItem(Item i) {
System.out.println("adhero use item");
super.useItem(i);
} public static void main(String[] args) {
ADHero h = new ADHero(); LifePotion lp = new LifePotion(); } }

练习: super

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

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

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

子类应该怎么处理?

package charactor;

public class Hero {
public String name;
protected float hp; public Hero(String name){
this.name = name;
} // 故意不提供无参的构造方法
// public Hero(){
//
// } public static void main(String[] args) { } }

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. html中常用的转义字符总结

      不断行的空格   半方大的空格     全方大的空格 <   小于 < > 大于 > & &符号 " 双引号" ©     版权符号© ...

  2. KVM虚拟机嵌套虚拟化

    KVM虚拟机嵌套虚拟化 背景介绍 ​ 在Arch linux的 KVM 虚拟机上启动来部署开源Iaas系统zstack时,需要开启虚拟机嵌套虚拟化. 解决 ​ KVM 嵌套式虚拟 Nested 是一个 ...

  3. V2X:

    一篇文章读懂V2X系列:标准篇 为了提升交通系统的安全性和智能化,智能交通系统的概念正逐渐兴起.智能交通可以利用新一代的通信网络和数据处理能力,提高现有交通系统的整体效率,降低能量损耗,增加运输的安全 ...

  4. go实现tcp 服务器

    我们将使用 TCP 协议和协程范式编写一个简单的客户端-服务器应用,一个(web)服务器应用需要响应众多客户端的并发请求:Go 会为每一个客户端产生一个协程用来处理请求.我们需要使用 net 包中网络 ...

  5. 攻防世界(Ctf-Web 新手练习区)

    题目:view_source 在url的前面加上个 “view-source: ”就看到flag了,或者“CTRL+U”快捷键查看源码 flag:cyberpeace{e07dcafaeeb31df2 ...

  6. 2018-2019-2 20165313 《网络对抗技术》 Exp 8 Web基础

    一.实践要求: (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2).Web前端javascip ...

  7. Spring Boot启动命令参数详解及源码分析

    使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...

  8. Kubeadm部署安装kubernetes1.12.1

    1.环境准备(这里是master) CentOS 7.6 两台配置如下,自己更改主机名,加入hosts, master和node 名字不能一样 # hostname master # hostname ...

  9. 1-5docker私有镜像仓库

    1.简单操作 1.在 https://cloud.docker.com 免费注册一个 Docker 账号 2.登录 docker login #命令登录 Docker Hub. 3.注销 docker ...

  10. .net core 使用本地包

    环境:.net core 2.2 类库:.Net  Standard 2.0 旧版本:   发布你自己的Nuget包 如果不想把包发布到nuget上面供别人引用,然后你有没有服务器,我们只能使用本地包 ...