每日学习-Java基础(十)接口和继承9(抽象类)

一、抽象类

1、引入

// 类中声明一个方法,该方法没有方法体,即“空方法”
// “空方法”,即抽象方法,abstract修饰
// 当一个类有抽象方法时,该类必须声明为抽象类

不是抽象类,报错。
每日学习-Java基础(十)接口和继承9(抽象类)_第1张图片

package ia9_abstract;

public abstract class Hero {
	protected String name;
	protected float hp;
	protected int armor;
	protected int moveSpeed;
	
	// 抽象类
	// 抽象方法,没有方法体
	public abstract void attack();
}

2、特点
// 子类必须实现父类抽象方法

package ia9_abstract;

public class ADHero extends Hero implements AD {

	@Override
	public void phsyicAttack() {
		// TODO Auto-generated method stub
		System.out.println("进行物理攻击");
	}

	// 实现父类抽象方法
	@Override
	public void attack() {
		// TODO Auto-generated method stub
		phsyicAttack();
	}
}

// 抽象类可以没有抽象方法
// 一旦声明为抽象类,不能直接实例化
// Cannot instantiate the type Hero

每日学习-Java基础(十)接口和继承9(抽象类)_第2张图片
二、抽象类 VS 接口

// 区别1
// 抽象类,子类只能继承一个抽象类
RealHero只能实现Hero,Item类中的一个

package ia9_abstract2;

public abstract class Hero {
	public final static int ItemTotalNumber = 6;
	public String name;
	float hp;
	protected int armor;
	private int moveSpeed;

	public abstract void attack();	
}
package ia9_abstract2;

public abstract class Item {
	protected String name;
	protected float price;

	public void buy() {
		System.out.println("买买买");
	}

	public abstract void effect();
}

每日学习-Java基础(十)接口和继承9(抽象类)_第3张图片
// 接口,子类可以实现多个接口
ADAPHero可以实现AD、AP接口
详见链接
https://blog.csdn.net/weixin_41117393/article/details/103677557

// 区别2
// 抽象类,属性可以是public,default,protected,private,static,final中任意一个或多个修饰
如区别1,Hero类属性所示;
// 接口,属性只能是public static final修饰
如下所示,使用其他修饰符将报错。
// Illegal modifier for the interface field AD.i; only public, static & final are permitted
每日学习-Java基础(十)接口和继承9(抽象类)_第4张图片
// 区别3
// 抽象类,方法可以是实体方法,抽象方法;
如区别1,Item类所示。有实体方法(有具体实现),有抽象方法(空,无具体实现)
// 接口,方法可以是默认方法(实体方法,与抽象类中实体方法不同),空方法(抽象方法)。
默认方法待解锁,空方法(无具体实现)。

三、练习
// 为Item类设计抽象方法disposable(),返回值为布尔类型;
// LifePotion、MagicPotion、Weapon、Armor分别继承Item类,并实现抽象方法disposable();
// LifePotion、MagicPotion返回true,使用后消失;
Weapon、Armo返回false,武器使用后仍然存在。

我的学习源泉:https://how2j.cn/k/interface-inheritance/interface-inheritance-abstract-class/314.html?p=114999
Java自学网站:https://how2j.cn?p=114999

你可能感兴趣的:(Java,java,interface,抽象类)