抽象类和接口

接口和抽象类

一、抽象类

抽象类是指在普通类的结构里面增加抽象方法的组成部分。

抽象方法

如果一个方法,不需要实现体(函数内容),就可以声明抽象方法

抽象方法:没有方法体的方法。java中使用abstract关键字声明的方法就是抽象方法。

访问修饰符 abstract 返回值类型 方法名称(参数列表);
(注:抽象方法必须定义在抽象类中。)

注意

  1. 抽象类中不一定有抽象方法!!!
  2. 如果一个类继承了抽象类,就必须实现该类的抽象方法!!!
  3. 如果一定不实现,则将这个子类继续声明抽象类。

抽象类——被abstract关键字修饰的类

[修饰符] abstract class 类名{
    
}

抽象类的使用原则如下:

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;

(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;

(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;

(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

public class Demo2{
    public static void main(String[] args) {
        B b = new B();

        b.print();//被子类所覆写的过的方法
    }
}

abstract class A{//定义一个抽象类

    public void fun(){//普通方法
        System.out.println("存在方法体的方法");
    }

    public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
}
//单继承
class B extends A {//B类是抽象类的子类,是一个普通类

    @Override
    public void print() {//强制要求覆写
        System.out.println("Hello World!");
    }
}

在这里插入图片描述

注意:抽象类只能单继承。

二、接口

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口的本质是特殊的类(特殊的抽象类)。

接口中所有方法都是没有实现的(抽象方法:即只有方法标识符,而没有方法体)。

在jdk8之前:接口中的所有属性和方法,默认都是public的!!!即便是你没有使用public关键字修饰。

注意:接口可以多实现!!

jdk8的接口新特性:允许接口存在默认方法和静态方法,非抽象方法。

接口中成员的特点

  1. 接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量。
  2. 接口中可以定义方法,方法也有固定的修饰符,public abstract
  3. 接口中的成员都是公共的。
  4. 接口不可以创建对象。
  5. 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类.

接口的定义和继承

java中使用interface关键字来定义接口。

interface 接口名{
    
} 

接口的实现使用implements关键字实现接口。

interface A{

}
interface B{

}
interface C{

}

class TestInterface implements A,B,C{
    
}

子类一旦实现了接口,必须要实现接口所有的抽象方法,如果不想实现,则必须将该子类声明为抽象类。

在这里插入图片描述
在这里插入图片描述

接口也无法直接实例化,必须使用子类,以多态的形式完成实例化。

例:

interface A{
    public abstract void say();
}

class TestInterface implements A{

    @Override
    public void say() {
        System.out.println("Hello World!");
    }

    public static void main(String[] args) {
        TestInterface ti = new TestInterface();
        ti.say();
    }
}

在这里插入图片描述

为什么要用接口

  1. 接口被用来描述一种抽象。
  2. 因为Java不支持多继承,所以Java可以通过实现接口来弥补这个局限。
  3. 接口也被用来实现解耦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值