JAVA基础八 接口与继承

JAVA基础八 接口与继承

01 继承

  • 1、接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们就一定能够进行物理攻击。
  • 2、创建interface接口,并implements接入。
  1. 创建一个接口 File->New->Interface AD ,声明一个方法 physicAttack 物理攻击,但是没有方法体,是一个“空”方法。
public interface AD {
   
        //物理伤害
    public void physicAttack();
}
  1. 设计一类英雄,能够使用物理攻击,这类英雄在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()<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值