夯实Java基础(抽象类和接口)

一、抽象类

(1)相关知识

        抽象类是包含抽象方法的类;抽象方法没有方法体。
注意:

  1. 抽象方法不能实例化
  2. 抽象方法不能是private
  3. 抽象类可以包含其他的非抽象方法,也可以包含字段。这个非抽象方法和普通方法的规则是一样的,可以被重写,也可以被子类直接调用。

        抽象类的最大作用解释为了被继承。抽象类本身不能被实例化,要想使用,只能创建该抽象类的子类,然后让子类重写抽象类中的抽象方法。

        使用抽象类的的场景:实际工作不应该由父类完成,而应该由子类完成,那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的,但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。

(2)举例

建立一个抽象类

abstract public class Shape {
    abstract public void draw();
}

继承并实现这个draw方法

public class Circle extends Shape{
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Shape shape = new Circle();
        shape.draw();
    }
}

二、接口

(1)相关知识

        接口是抽象类的更进一步,抽象类中还可以包含非抽象方法和字段,而接口中的方法都是抽象方法,字段只能包含静态常量。

  • 接口中方法一定是抽象方法,因此可以省略abstract
  • 接口中的方法一定是public,因此可以省略public
  • 接口不能被单独实例化
  • 使用interface定义一个接口

总结:抽象类和接口的区别?
        抽象类中可以包含普通方法和普通字段,这样的普通方法和字段可以被子类直接使用(不必重写)而接口中不能包含普通方法,子类必须重写所有的抽象方法。
        抽象类仍然要遵守“单继承”这样的规则。一个类无法同时继承两个抽象类。接口和单继承无关,一个类可以实现多个接口。

(2)举例

建立一个接口

public interface IShape {
    void draw();
}

实现这个接口

public class Circle implements IShape {
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        IShape shape = new Circle();
        shape.draw();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值