Java的抽象类、抽象方法以及接口

1. 抽象类、抽象方法

普通类里面含有构造方法、普通方法、static方法、常量和变量等内容,可以被其他类继承并且实例化,但是当有的子类要继承父类一些内容时不要求父类的方法做出具体的细化内容,只需要提供一个方法供子类继承,此时就不需要方法体,这种方法叫做抽象方法,用关键字abstract修饰,而这个类也不需要实现具体的细化内容,故也不需要被实例化,即抽象类也用关键字abstract修饰。

范例:

创建抽象类、抽象方法:
public abstract class Shape {
    public  abstract void draw();//抽象方法不需要方法体
    public void printf(){
        System.out.println("***普通方法***");
    }
}

抽象类:

  • 使用关键字abstract修饰即为抽象类
  • 如果尝试创建抽象类的实例,就会编译报错
  • 抽象类除了不能被实例化以外,其他语法都和普通类一样
  • 抽象类中也可以有普通属性与方法
  • 子类继承时普通方法可以选择性重写,而抽象方法强制重写
  • 抽象类可以继承自其他类也可以被其他类继承
  • 抽象类不能被final关键字修饰,因为修饰后禁止继承而抽象类必须被继承

抽象方法:

  • 抽象方法不需要方法体
  • 抽象方法只能存在于抽象类中(也可以存在于接口内),不能在普通类中存在
  • 抽象方法不能被关键字private修饰,这样就无法被子类重写,而抽象方法存在的意义就是为了让子类进行重写

抽象类不能被实例化,若实例化就会编译报错:

 2. 接口

接口是抽象类的更进一步,由于Java的基础是单继承,可通过继承一个类,实现多个接口的方式完成多继承的效果,关键字为interface。

范例:

创建一个接口:
public interface Shape{
    //看似是一个普通的属性,其实是public static final 修饰的常量
    int num = 0;
    //虽然没有写public和abstract,但也表示的是一个抽象的公有方法
    void draw();
}
Rect类实现接口Shape:
public class Rect implements Shape {
    @Override
    public void draw() {
        System.out.println("□");
    }
}
  • 接口不能被实例化(抽象类的更进一步),也不具有各种类的特性;
  • 接口中可以写抽象方法(不必写abstract);
  • 接口中不能写普通方法/属性,只能写由public static final 修饰的属性;
  • 接口不能继承自其他的类但可以继承自其他接口;
  • 接口不能被其他类继承而是被其他类“实现”(implements关键字);
  • 接口与接口之间可以继承(extends);
  • 一个类只能继承自一个抽象类但能够实现多个接口(多个接口就可以实现类似于多继承的效果,由于接口内不存在普通实例属性,故不会出现各种多继承的问题);
  • 实现多个接口之间使用“,”隔开;
  • 接口命名一般为“I"为前缀,以形容词命名,表具有xxx特性;
  • 接口相当于一种约束,要求实现了该接口的类必须重写所有的接口中的抽象方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值