【Java SE】抽象类和接口

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

欢迎志同道合的朋友一起加油喔🤺🤺🤺


目录

前言

一.抽象类

1.抽象类的概述

2.抽象类特点(★★★)

3.抽象关键字abstract和哪些不可以共存?

4.抽象类的细节

5.抽象类的作用 

二.接口(★★★★★)

1.什么是接口

2.接口的语法 

3.接口成员的特点

4.接口和类之间的关系

5.接口存在的意义


前言

哈喽各位友友们,今天给大家带来了抽象类和接口的用法,在这里做了一个精简的总结,希望能给你们带来帮助!


一.抽象类

1.抽象类的概述

如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类.

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

抽象类和抽象方法用abstract关键字来修饰

抽象类: abstract class 类名{}

抽象方法: pubic abstract void eat();//抽象方法中没有方法体

2.抽象类特点(★★★)

1.抽象类中不一定有抽象方法,但是有抽象方法的类必须为抽象类

2.抽象类不能实例化

3.抽象类由具体的子类进行实例化

4.子类必须对父类(抽象类)中的所有抽象方法进行重写

5.在抽象类中可以定义非抽象方法

6.子类如果不重写抽象类中的抽象方法,则该类还是为抽象类

7.抽象类中可以有构造方法,用于子类访问父类时的数据初始化;

8. 抽象类可以声明对象,也可以实现多态

9.抽象类可以实现接口,可以不重写(实现)其中的抽象方法,交由它具体的子类来实现

 代码演示如下:

public abstract class Person {

    public void eat(){
        System.out.println("团团今天没吃饭!");
    }
  
    public abstract void say();
    public abstract void sleep();
}

class Student extends Person{
    @Override
    public void say() {
        System.out.println("我喜欢演讲!");
    }
    @Override
    public void sleep() {
        System.out.println("我喜欢睡觉!");
    }
}
class Demo{
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //11.创建抽象类的对象:-->抽象类不可以创建对象
        //Person p = new Person();
        //12.创建子类对象:
        Student s = new Student();
        s.sleep();
        s.say();

3.抽象关键字abstract和哪些不可以共存?

private    冲突   abstract的方法必须被子类重写,而private不能被继承

final      冲突    final修饰的方法,变量都不能修改,而abstract修饰的方法必须被重写

static     不能共存 无意义   static 是静态的,abstract方法中无方法体,无法调用。

4.抽象类的细节

(1)抽象类中是否可以定义非抽象方法?

可以。其实,抽象类和一般类没有太大的区别,都是在描述事物,只不过抽象类在描述事物时,有些功能不具体。所以抽象类和一般类在定义上,都是需要定义属性和行为的。只不过,比一般类多了一个抽象方法。而且比一般类少了一个创建对象的部分。

(2)抽象类中可不可以不定义抽象方法?

可以。抽象方法目的仅仅为了不让该类创建对象。

5.抽象类的作用 

有些友友们可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢?

确实如此. 但是使用抽象类相当于多了一重编译器的校验.

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

很多语法存在的意义都是为了 "预防出错", 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不就相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们.
充分利用编译器的校验, 在实际开发中是非常有意义的.


二.接口(★★★★★)

1.什么是接口

接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。

Java中的接口更多的体现在对行为的抽象!

2.接口的语法 

1.接口 用关键字interface 修饰

public interface 接口名{}

2.类实现接口用 implements 表示

public class 类 implements 接口 {}

3.接口不能够实例化(不能创建对象)

接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。

多态的形式:具体类多态,抽象类多态,接口多态。

4.多态的前提:有继承或者实现关系;有方法重写;有父(/接口引用)指向(/实现)类对象

5.接口的实现类,要么重写接口中所有的抽象方法、要么是抽象类

3.接口成员的特点

1、成员变量只能是常量;(直接通过接口名称访问即可)

   默认修饰符 public static final

2、成员方法只能是抽象方法;(JDK8开始 是可以在接口中定义非抽象方法   是需要加上default关键字修饰,JDK9开始可以在接口中定义私有方法)

   默认修饰符 public abstract

3、接口没有构造方法;

 因为接口主要对行为进行抽象,没有具体存在,一个类如果没有父类,默认继承自Object类

4.接口和类之间的关系

(1)类和类之间的关系

继承关系,只能单继承,不能多继承,但是可以多层继承.

(2)类和接口的关系

实现关系,可以单实现,也可以多实现,还可以在继承一个类的时候同时实现多个接口.

(如果多个接口中出现同名的抽象方法,实现类在重写的时候只需要重写一次)

(3)接口和接口的关系

继承关系,可以单继承,也可以多继承.

(如果实现类实现了最下面的子接口,那么就需要重写所有接口的抽象方法)


5.接口存在的意义

1、重要性:在Java语言中, class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。

2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。

3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类,可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦,如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。

4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。 

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

书生-w

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

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

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

打赏作者

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

抵扣说明:

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

余额充值