文章目录
JAVA基础八 接口与继承
01 继承
- 1、接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们就一定能够进行物理攻击。
- 2、创建interface接口,并implements接入。
- 创建一个接口 File->New->Interface AD ,声明一个方法 physicAttack 物理攻击,但是没有方法体,是一个“空”方法。
public interface AD {
//物理伤害
public void physicAttack();
}
- 设计一类英雄,能够使用物理攻击,这类英雄在LOL中被叫做AD类:ADHero,继承了Hero 类,所以继承了name,hp,armor等属性实现某个接口,就相当于承诺了某种约定。所以,实现了AD这个接口,就必须提供AD接口中声明的方法physicAttack(),实现在语法上使用关键字 implements。
public class ADHero extends Hero implements AD{
@Override
public void physicAttack() {
System.out.println("进行物理攻击");
}
}
02 对象转型
- 1、明确引用类型和对象类型。
Hero h =new Hero();
//前一个Hero是引用类型
//后者是对象类型
- 2、子类转父类(向上)。语义理解:右边 is 左边?。
Hero h =new Hero();
ADHero ad=new ADHero();
h=ad;
//ad转换为能否成功。
//ADHero是Hero
一定成功,安全。
- 3、父类转子类(向下)。
Hero h =new Hero();
ADHero ad = new ADHero();
Support s =new Support();
h = ad;//ad is h,succeed
ad = (ADHero) h;//强制转换,succeed
h = s;//s is h,succeed
ad = (ADHero)h;//fail,Throw CalssCastException
有风险,看具体指向的对象。
- 4、没有继承关系的转换。
一定不可以。 - 5、类转换成接口(向上)
引用ad指向的对象是ADHero类型,这个类型实现了AD接口,以下把一个ADHero类型转换为AD接口。
ADHero ad = new ADHero();
AD adi = ad;//一个ADHero类型转换为AD接口。
- 6、接口转换成实现类
有一定风险。
AD adi = ad;// succeed
ADHero adHero = (ADHero) adi;// succeed
ADAPHero adapHero = (ADAPHero) adi;//fail
adapHero.magicAttack();
- 7、instanceof
用以判断一个引用所指向的对象,是否是xxx类型,或者的xxx子类。一般用在先判断类型是否相同,再进行类型转换。
ADHero ad = new ADHero();
APHero ap = new APHero();
Hero h1= ad;
Hero h2= ap;
//判断引用h1指向的对象,是否是ADHero类型
System.out.println(h1 instanceof ADHero);
//判断引用h2指向的对象,是否是APHero类型
System.out.println(h2 instanceof APHero);
//判断引用h1指向的对象,是否是Hero的子类型
System.out.println(h1 instanceof Hero);
if(h1 instanceof ADHero){
//语句;
}
03 重写
子类会继承父类的方法,若子类重复写下父类的方法,进行覆盖,又名Override。
- 1、父类Item有方法effect();
public class Item {
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect() {
System.out.println("物品使用后,可以有效果");
}
}
- 2、子类LifePotion也有effect()方法;
public class LifePotion {
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect(){
System.out.println("血瓶使用后,可以回血");
}
}
- 3、调用方法时采用就近原则
public class LifePotion extends Item{
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect(){
System.out.println("血瓶使用后,可以回血");
}
public static void main(String[] args) {
Item i = new Item();
i.effect();//调用LifePotion的方法
LifePotion lp =new LifePotion();
lp.effect()<