Java自学-接口与继承 抽象类
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自学-接口与继承 抽象类的更多相关文章
- Java自学-接口与继承 接口
设计Java的接口 在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击 这时候,就可以使用接口来实现这个效果. 接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们 ...
- Java自学-接口与继承 内部类
Java 内部类 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤 1 : 非静态内部类 非静态内部类 BattleScore "战斗成绩" 非静态内部类可以直接在 ...
- Java自学-接口与继承 对象转型
Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是A ...
- Java自学-接口与继承 UML图
UML 图 步骤 1 : UML 图 -- 类之间的关系 UML-Unified Module Language 统一建模语言,可以很方便的用于描述类的属性,方法,以及类和类之间的关系 步骤 2 : ...
- Java自学-接口与继承 默认方法
默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法 Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现 ...
- Java自学-接口与继承 final
Java的修饰符final final修饰类,方法,基本类型变量,引用的时候分别有不同的意思. 示例 1 : final修饰类 当Hero被修饰成final的时候,表示Hero不能够被继承 其子类会出 ...
- Java自学-接口与继承 Object类
Java中的超类 Object 步骤 1 : Object类是所有类的父类 声明一个类的时候,默认是继承了Object public class Hero extends Object package ...
- Java自学-接口与继承 多态
Java的多态 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父类引用指向子类对象 示例 1 : 操作符的多态 同一个操作符在不同情境下,具备不同的作用 如果+号两侧都是整型,那么 ...
- Java自学-接口与继承 重写
Java 重写方法 子类可以继承父类的对象方法 在继承后,重复提供该方法,就叫做方法的重写 又叫覆盖 Override 步骤 1 : 父类Item 父类Item有一个方法,叫做effect packa ...
随机推荐
- sklearn---评价指标
查看sklearn支持的评价指标: import sklearn sorted(sklearn.metrics.SCORERS.keys()) ['accuracy', 'adjusted_mutua ...
- 一探istio-proxy(envoy)容器里的秘密
今天,在测试环境跑通了istio. 惭愧,是用MicroK8s跑的,其它环境,不敢呀. 基本功能都OK了. 在运行了istio-injection=enabled之后,每个pod运行时,会多一个ist ...
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- python3用turtle库进行绘制小猪佩奇图案
晚上闲着无事,深入学习这个turtle用法,就做了小猪佩奇图 附上代码: # coding: utf-8 #功能:绘画小猪佩奇 import turtle as t t.screensize(400, ...
- 03-C#笔记-数据类型
--- # 1 数据类型 --- ## 1 和C++不同的数据类型: byte: 8位,0~255 decimal:范围大于double,128位 sbyte: 8位,-128~127 uint 32 ...
- 项目1:ATM+购物商城项目
项目1:ATM+购物商城 1.项目介绍 项目需求: # 项目需求如下:'''- 额度 15000或自定义- 实现购物商城,买东西加入购物车,调用信用卡接口结账- 可以提现,手续费5%- 支持多账 ...
- python 通过scapy获取网卡列表
python通过scapy 获取网卡列表如下: #coding:utf-8 from scapy.all import * #显示网卡信息 show_interfaces() 运行结果如下:
- vue-echarts在vue中的使用
安装依赖: [win]npm install echarts vue-echarts [mac]sudo npm install echarts vue-echarts Vue-ECharts 默认在 ...
- ipv6转ipv4 NAT64与DNS64基本原理概述
原文: https://blog.csdn.net/zhangjie1989/article/details/51464251 1.NAT64与 DNS64背景 在 IPv6网络的发展过程中,面临最大 ...
- Hive常见错误
1.root is not allowed to impersonate root 修改etc/hadoop/core-site.xml,增加如下配置: <property> <na ...