Java 抽象类

在类中声明一个方法,这个方法没有实现体,是一个“空”方法

这样的方法就叫抽象方法,使用修饰符“abstract"

当一个类有抽象方法的时候,该类必须被声明为抽象类

步骤 1 : 抽象类

为Hero增加一个抽象方法 attack,并且把Hero声明为abstract的。

APHero,ADHero,ADAPHero是Hero的子类,继承了Hero的属性和方法。

但是各自的攻击手段是不一样的,所以继承Hero类后,这些子类就必须提供不一样的attack方法实现。

package charactor;

public abstract class Hero {
String name; float hp; float armor; int moveSpeed; public static void main(String[] args) { } // 抽象方法attack
// Hero的子类会被要求实现attack方法
public abstract void attack(); } package charactor; public class ADHero extends Hero implements AD { public void physicAttack() {
System.out.println("进行物理攻击");
} @Override
public void attack() {
physicAttack();
} }
package charactor; public class APHero extends Hero implements AP { @Override
public void magicAttack() {
System.out.println("进行魔法攻击");
} @Override
public void attack() {
magicAttack();
} }
package charactor; public class ADAPHero extends Hero implements AD, AP { @Override
public void attack() { System.out.println("既然可以进行物理攻击,也可以进行魔法攻击");
} public void magicAttack() {
System.out.println("进行魔法攻击");
} public void physicAttack() {
System.out.println("进行物理攻击");
} }

步骤 2 : 抽象类可以没有抽象方法

Hero类可以在不提供抽象方法的前提下,声明为抽象类

一旦一个类被声明为抽象类,就不能够被直接实例化

package charactor;

public abstract class Hero {
String name; float hp; float armor; int moveSpeed; public static void main(String[] args) {
//虽然没有抽象方法,但是一旦被声明为了抽象类,就不能够直接被实例化
Hero h= new Hero();
} }

步骤 3 : 抽象类和接口的区别

区别1:

子类只能继承一个抽象类,不能继承多个

子类可以实现多个接口

区别2:

抽象类可以定义

public,protected,package,private

静态和非静态属性

final和非final属性

但是接口中声明的属性,只能是

public

静态

final的

即便没有显式的声明

: 抽象类和接口都可以有实体方法。 接口中的实体方法,叫做默认方法

package charactor;

public interface AP {

    public static final int resistPhysic = 100;

    //resistMagic即便没有显式的声明为 public static final
//但依然默认为public static final
int resistMagic = 0; public void magicAttack();
}

练习抽象类

有的物品使用之后就消失了,比如血瓶

有的物品使用了之后还会继续存在,比如武器

为Item类设计一个抽象方法

public abstract boolean disposable()

不同的子类,实现disposable后,会返回不同的值。

比如LifePotion就会返回true,因为是会消失了。

而Weapon,Armor 就会返回false,因为是不会消失了

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

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

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

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

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

  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自学-接口与继承 final

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

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

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

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

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

  9. Java自学-接口与继承 重写

    Java 重写方法 子类可以继承父类的对象方法 在继承后,重复提供该方法,就叫做方法的重写 又叫覆盖 Override 步骤 1 : 父类Item 父类Item有一个方法,叫做effect packa ...

随机推荐

  1. CAJViewer 去除右上角闪动的图标

    打开CMD,粘贴如下代码: %homedrive% cd "%userprofile%\Documents\My eBooks\" del ad0.xml md ad0.xml m ...

  2. SQL Server 默认跟踪(Trace)捕获事件详解

    SQL Server 默认跟踪 -- 捕获事件详解 哪些具体事件默认跟踪文件能够捕获到? --returns full list of events SELECT * FROM sys.trace_e ...

  3. CLR Exception 0xE0434F4D和0xE0434352的区别

    <根据<CLR Exception---E0434352>和<CLR Exception---E0434F4D>这两篇随笔,我们会发现,这两个异常太相似了,除了代码值不一 ...

  4. js设置元素指定时间隐藏

    $().fadeOut(); js指定时间隐藏

  5. 基于GPU的算法并行化

    GPU计算的目的即是计算加速.相比于CPU,其具有以下三个方面的优势: l  并行度高:GPU的Core数远远多于CPU(如G100 GPU有240个Cores),从而GPU的任务并发度也远高于CPU ...

  6. Gamma阶段第八次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...

  7. 第2课 auto类型推导(1)

    第2课 auto类型推导(1) 一.auto类型推导 (一)与模板类型推导映射关系 1.auto类型推导与模板类型推导可以建立一一映射关系,它们之间存在双向的算法变换.auto扮演模板中T的角色,而变 ...

  8. 【C/C++开发】c++ 工具库 (zz)

    下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形.图像.游戏.人工智能等各个方面,感觉是一个比较全的资源.供参考!  原文的出处:http://www.codemonsters.de/ho ...

  9. Mercari Price Suggestion in Kaggle

    Mercari Price Suggestion 最近看到了一个竞赛,竞赛的内容是根据已知的商品的描述,品牌,品类,物品的状态等特征来预测商品的价格 最后的评估标准为 平均算术平方根误差Root Me ...

  10. 通过inspect在电脑的Chrome上查看手机上的H5

    首先打开手机的开发者模式,(在连续点击7次版本号,系统会提示已经打开开发者模式) 然后打开一个手机浏览器. 然后在电脑上打开chrome://inspect/#devices.这是就会出现手机上浏览器 ...