java基础——抽象类和接口

参考:https://how2j.cn/k/interface-inheritance/interface-inheritance-override/309.html?p=136471

一.抽象类(abstract)

以abstract修饰的方法或类即为抽象方法或抽象类
在类中声明一个没有实现体的方法,这样的方法就叫抽象方法,使用修饰符“abstract"
当一个类有抽象方法的时候,该类必须被声明为抽象类,抽象类的子类就必须重写抽象方法

  1. 抽象方法
    没有方法体(花括号也不要),必须定义在抽象类中或接口中

  2. 抽象类
    结构和普通类差不多,也可以有普通的属性和方法
    抽象类不能被实例化,抽象类在使用时必须派生子类,并在子类中重写抽象方法,抽象类必须有子类才有意义

定义一个抽象类

public abstract class Hero {
	// 抽象方法attack
    // Hero的子类会被要求实现attack方法
    public abstract void attack();
}

实现类

public class ADAPHero extends Hero implements AD, AP {
    @Override  // 重写父类中的抽象方法
    public void attack() {
        System.out.println("既可以进行物理攻击,也可以进行魔法攻击");
    }
}

二.接口

接口是一种规范,用于规定一组必须实现的方法,使用关键字interface定义,区别于抽象类的是,一个类可以实现多个接口
接口中除了定义"空"方法,也可以定义默认方法(default)
默认方法的好处:引入了默认方法后,实现类中不需要做任何改动,并且还能得到这个默认方法

// 新建一个接口,约定需要实现的方法,接口中不写方法体
public interface AD {
    public void physicAttack();  // 没有花括号
    
    default public void revive() {  // 使用default关键字定义默认方法
        System.out.println("本英雄复活了");
    }
}

实现类 implements

// implements关键字进行接口的实现,重写接口中约定的方法
public class ADHero extends Hero implements AD,AP {
    @Override
    public void physicAttack(){
        System.out.println("实现physicAttack接口");
    }

// 如果实现类继承了多个接口,接口中都提供了相同的默认方法,那么实现类中需要重写,不然java不知道要去调用哪个接口的默认方法
    @Override
    public void attack(){  // 重写默认方法,并指明调用哪个接口的默认方法
        AD.super.attack();
    }
}

在java中,只可以有一个父类,但可以同时实现多个接口
接口中定义的变量都是静态的全局变量(所以一般不这么用),需要初始化(类中定义的变量可以不初始化);

三、区别

1.子类只能继承一个抽象类,不能继承多个;而子类可以实现多个接口
2.抽象类可以定义 public,protected,package,private ,静态和非静态属性, final和非final属性
但是接口中声明的属性,只能是 public static final 的,即便没有显式的声明

抽象类和接口都可以有实体方法。 接口中的实体方法,叫做默认方法,使用关键字default

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值