接口和抽象类最详细

抽象类

抽象方法:没有方法体的方法,并且使用abstract关键字修饰的方法

抽象类:用abstract修饰的类就是抽象类

abstract class Demo4 {
    public void add(){
        System.out.println("add...");
    }
    public abstract void minus();
}

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

class Demo6 extends Demo4{
    @Override
    public void minus() {
        System.out.println("minus...");
    }
}

特点

  • 有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法
  • 抽象类是不可以直接创建对象的,但是可以通过其子类来创建对象
  • 抽象类中有构造方法,但是不可以用来创建对象,但是可以供子类初始化父类的成员变量
  • 抽象类的子类如果是普通类,那么必须实现抽象类中的抽象方法

为什么Java需要抽象类

java定义抽象类,是为了更好的继承,减少类与类之间的耦合。、

总之:抽象类就是为继承而生

接口

Java中的接口是特殊的抽象类,接口中只定义了方法,没有方法的实现。(ps:Java8以后可以有默认的实现),一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

总结:接口是一组行为的规范、定义,没有实现。

特点:

1、接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)。

public static final int NUMBER_COUNT = 12;
int NUMBER_COUNT_2  = 12;

2、接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

public abstract void add();
void minus();

3、接口中没有构造方法,不能被实例化

4、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

public interface Demo01 {
    public static final int NUMBER_COUNT = 12;
    int NUMBER_COUNT_2  = 12;
    public abstract void add();
    void minus();
}
//接口Demo2
interface Demo2 {

}
//接口Demo3继承Demo2和Demo01
interface Demo3 extends Demo01,Demo2{

}

5、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

abstract class Demo4 implements Demo01{
    public void add(){
        System.out.println("add...");
    }
    public abstract void minus();
}

class Demo5 implements Demo01{
    @Override
    public void add() {
        System.out.println("add...");
    }

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

为什么Java会有接口

  • 一个类只能继承一个父类,但是可以实现一个或多个接口,弥补了java类不能多继承

  • 屏蔽了实现的不同的差异

  • 面向接口编程,利用接口解耦

抽象类与接口的区别

抽象类接口
抽象类在类名前使用关键字abstract声明,抽象类中变量和方法可以使用private/protected/public/final/static关键字修饰接口在接口名称前使用interface关键字修饰
抽象类中可以没有抽象方法接口中定义的变量是public static final的,必须初始化,实现类不可修改
抽象类中变量和方法可以使用private/protected/public/final/static关键字修饰接口中的方法均为public(关键字通常省略),接口中方法可以没有方法体(此时是public abstract),也可以有具体实现,具体实现的方法但必须使用default关键字修饰
抽象类中可以有构造方法(默认或者自定义)接口中不可以有构造方法
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
  • 子类使用extends继承一个抽象类,而一个类使用implements实现一个接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值