javaSE中抽象类和接口

javaSE中抽象类和接口

一、抽象类
什么是抽象类???
包含抽象方法的类,什么是抽象方法呢?
抽象方法,就是方法没有具体实现的方法用abstract修饰
在这里插入图片描述
1.1、抽象类不能被实例化
在这里插入图片描述

抽象类和普通类的区别:
抽象类比普通类多了抽象方法

1.2、抽象类可以拥有和普通类一样的方法和成员
在这里插入图片描述

1.3、一个普通类继承了抽象类,那必须重写抽象方法
在这里插入图片描述

1.4、抽象类主要是用来继承的,一个抽象类A继承抽象类Shape,可以不用重写抽象方法
在这里插入图片描述

1.5、如果一个普通B类继承了抽象类A,抽象类A又继承了抽象类 Sphea,那普通B类就要重写抽象类A和抽象类 Sphea里的所有抽象方法
在这里插入图片描述

1.6、抽象类不能被final修饰,也不能修饰抽象方法,也不能是私有的
在这里插入图片描述

抽象类的作用:
抽象类存在的最大意义就是为了被继承.
抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法
使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了,
使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题
在这里插入图片描述

二、接口

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

语法规则:(接口名一般使用大写的 I 开头)
interface 接口名{

}

interface IShape {

}

2.1、接口当中的普通方法,不能有具体的实现。非要实现,只能通过关键字default来修饰,这个方法。
在这里插入图片描述
在这里插入图片描述

2.2、接口当中,可以有static的方法。里面的所有的方法都是public的。
在这里插入图片描述

2.3、抽象方法,默认是public abstract的。
在这里插入图片描述

2.4、接口不能实例化对象*
在这里插入图片描述

2.5、类和接口之间的关系是通过implements实现了。
在这里插入图片描述

2.6、接口当中的成员变量,默认是public static final修饰的
在这里插入图片描述

2.7、当一个类实现一个接口之后,重写这个方法的时候,这个方法前面必须加上public .
在这里插入图片描述
2.8、一个类可以通过关键字extends继承一个抽象类或者普通类,但是只能继承一个类。同时,也可以通过implements扩展多个接口,中间用逗号隔开,如果继承的是抽象类那要重写抽象类的抽象方法,也要重写接口中的抽象方法

interface ISphea{
    public static final int a3 = 10;

    public static void app(){
        System.out.println("");
    }

    void func2();

    public abstract void func3();
}
interface ID{
    void func4();
}

abstract class B{
     abstract public void func5();
}

class A extends B implements ISphea,ID{
    @Override
    public void func2() {
        System.out.println("hhh");
    }

    @Override
    public void func3() {
        System.out.println("重写接口的抽象方法");
    }

    @Override
    public void func4() {
        System.out.println(12);
    }

    @Override
    public void func5() {
        System.out.println("789");
    }
}

2.9
接口和接口之间可以使用extends来操作他们的关系,此时,这里面意为:拓展。
一个接口B通过extends来拓展另一个接口C的功能。此时当一个类D通过implements实现这个接口B的时候,此时重写的方法不仅仅是B的抽象方法,还有他从C接口,拓展来的功能【方法】。

在这里插入图片描述

小结
在这里插入图片描述

在这里插入图片描述
接口的实例

class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }
}

interface IFei{
    void func();
}

interface IYou {
    void func1();
}

//鸭子是动物的一种,不是所有的动物都会游泳,都会飞。。
//因为一个类不能继承多个类,但是可以实现多个接口,这样就能更好的抽象出鸭子这个对象
class Yazi extends Animal implements IFei,IYou {

    public Yazi(String name){
        super(name);
    }
    @Override
    public void func() {
        System.out.println("鸭子在飞");
    }

    @Override
    public void func1() {
        System.out.println("鸭子在游泳");
    }

}

public class TestDome {
    //这里就发生了动态绑定
    public static void appFei(IFei iFei){
        iFei.func();
    }

    public static void appYou(IYou iYou){
        iYou.func1();
    }
    public static void main(String[] args) {
        Yazi yazi = new Yazi("鸭子");
        appFei(yazi);
        appYou(yazi);
    }
}

总结
抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别(重要!!! 常见面试题).

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不
能包含普通方法, 子类必须重写所有的抽象方法 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Später321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值