【JAVA SE】抽象类和接口

✨✨欢迎大家来到Celia的博客✨✨

🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉

所属专栏:JAVA

个人主页Celia's blog~

目录

 引言

一、抽象类

1.1 抽象类的定义

 1.2 抽象方法

 1.3 抽象类的特性

1.4 抽象类的使用

 1.5 抽象类的作用

二、接口(interface、implements)

2.1 接口的定义

2.2 接口的特性

2.3 接口的使用

三、抽象类和接口的区别


 

 引言

  在面向对象的概念中,类是用来详细描述一个对象的,但若是一个类没办法完全的描述一个对象的时候,我们通常会把这个类设置成抽象的,也就是抽象类。

一、抽象类

1.1 抽象类的定义

  声明一个抽象类:

abstract class Animal{
//关键字        类名
    
}

我们用abstract关键字来声明一个抽象类,在这里有一些注意事项:

  1. 抽象类只能被继承,无法直接实例化对象。
  2. 抽象类中可以包含字段、方法、抽象方法 。
  3. 除以上外,抽象类的使用方法与其他类并无区别

 1.2 抽象方法

  抽象方法是没有具体实现过程的一个方法声明,由继承了抽象类的子类实现(方法重写)。现在我们在抽象类中声明一个抽象方法:

abstract class Animal{
    public abstract void eat();
// 修饰符   关键字                
}

 1.3 抽象类的特性

  • 如果一个抽象类中有抽象方法,一个子类继承了抽象类,如若不重新实现该抽象类中的抽象方法,该子类必须也是抽象的。
  • 如果普通类继承了抽象类,这个普通类必须实现该抽象类以及其子类的所有抽象方法。
  • 抽象类里可以没有抽象方法,但若是想要声明抽象方法,必须在抽象类里实现。
  • 抽象类中可以有构造方法,待到子类被实例化时,会调用父类(抽象类)的抽象方法。
  • 抽象方法不能被final、static修饰,原因是:final修饰的方法不能被重写、static修饰的方法依赖于类,不依赖于对象,故子类不可重写。

1.4 抽象类的使用

abstract class Animal{
    public String name;
    public int age;

    public Animal(String name, int age) { //抽象类的构造方法
        this.name = name;
        this.age = age;
    }

    public abstract void eat();//抽象方法
}

class Cat extends Animal{
    public Cat(String name, int age) {//子类的构造方法
        super(name, age);//调用抽象类的构造方法
    }
    @Override    //重写抽象类中的抽象方法
    public void eat() {
        System.out.println("吃猫粮...");
    }
}

 1.5 抽象类的作用

  • 相比于继承普通类,抽象类被要求只能被继承,这样有利于我们描述一个对象。
  • 相比于重写普通的方法,抽象类多了一层编译检验,要求子类必须重写抽象方法,这样更利于我们的开发,更有有利于多态的实现。

二、接口(interface、implements)

  顾名思义,现实中的接口:如USB接口、TypeC接口、有线耳机接口...从这些例子中可以看出:接口是一个统一的规范。在Java中,接口就是多个类的一种统一规范。

2.1 接口的定义

interface Ieat{
//关键字  接口名
} 

接口的定义与类的定义类似,只是把class换成了interface。一般情况下,接口名以大写的I来开头。

2.2 接口的特性

  • 接口也是一种引用类型。
  • 接口与抽象类一样,不能直接实例化对象,只能由一个类来实现一个接口。
  • 接口中的成员变量默认由 public static final 修饰。
  • 接口中的方法默认由 public abstract 修饰,也就是抽象方法。(其他修饰符都会报错)。
  • 严格来讲,接口不属于类,但是接口编译后的字节码文件的后缀也是class。
  • 接口中的方法不能由接口实现,只能由实现了该接口的类来实现。
  • 一个类只能继承一个父类,但是可以实现多个接口,多个接口之间由逗号隔开。
  • 一个类实现多个接口时,每个接口的抽象方法都要实现,否则必须设置为抽象类。
  • 接口和接口之间可以实现多继承(extends),表示接口的扩展。

2.3 接口的使用

interface Ieat{            //定义一个接口
    public static final int a = 1;
    public abstract void eat();
}
abstract class Animal{
    public String name;
    public int age;

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

}

class Cat extends Animal implements Ieat{  //继承了一个父类,实现了一个接口
    public Cat(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat() {
        System.out.println("吃猫粮...");    //重写接口中的方法,实现多态
    }
}

我们用 interface这个关键字来定义一个接口,使用implements关键字来让一个类实现一个接口。

三、抽象类和接口的区别

  • 抽象类可以包含普通方法和普通字段,普通方法和普通字段可以被子类直接使用,不必重写(想重写也可以,没有强制要求)。
  • 接口中的方法都是抽象方法,实现了该接口的类必须重写接口中所有的抽象方法。 
  • 接口中的成员变量都是由public static final修饰,属于类变量,依赖于类的加载而被加载。且不可被修改。
  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Celia~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值