Java基础-接口和抽象类

接口与抽象类

  1. 什么是接口
  2. 什么是抽象类
  3. 接口与抽象类的相同点
  4. 接口与抽象类的不同点
  5. 常见面试题

1.什么是接口

Java接口是一种特殊的Java数据类型,其中只定义了方法签名而没有实现,用于标准化类之间的交互。它定义了一个契约,规定实现类需要提供指定方法的具体实现,以便其他类可以使用该实现类的实例来调用这些方法。接口通常用于实现类之间的协作,以实现多态和松耦合的目的

在Java中,我们可以通过使用interface关键字来定义接口。以下是定义接口的示例代码:

public interface MyInterface { 

        public void doSomething();

}

这个接口定义了一个名为MyInterface的接口,它包含了一个叫做doSomething()的方法。MyInterface接口没有提供任何具体的实现,只是定义了方法的签名。实现类需要提供doSomething()方法的具体实现。

实现类可以实现一个或多个接口,并且必须提供接口中所有方法的具体实现。以下是一个示例实现类:

public class MyClass implements MyInterface {

        public void doSomething() {

                System.out.println("Doing something...");

        }

}

这个实现类MyClass实现了MyInterface接口,并且提供了doSomething()方法的具体实现。

接口还可以包含常量和默认方法。常量是final变量,可以在接口中定义并且必须被实现类使用。默认方法是接口中具有默认实现的方法,实现类可以选择覆盖它们。

简单来说:接口只是负责声明方法,但不实现方法

特点:interface关键字修饰,不能实例化

作用:分离接口与实现,使得代码修改时与接口本身无关

实现要求:

1. 类使用 implements 关键字实现接口,实现(重写)接口中所有方法

​2. 实现方法时:方法名称,参数列表(甚至参数顺序),返回类型都要与接口一致

​3. 实现类重写方法时必须使用 public 访问修饰符(重写的要求就是访问修饰符要和父类访问一致或更加宽松,接口设计初衷就是为了给外部调用,所以接口方法默认public, 实现类也就需要是public)

​4. 实现类不能完全实现接口时,实现类应该声明为抽象类

​5. 一个实现类可以实现多个接口,中间使用逗号隔开

接口是Java程序设计中的一个重要概念,非常有用。它提供了松散耦合和多态行为,并且是Java API的重要组成部分。理解接口的概念和使用方式对于设计良好的Java程序非常重要。

2.什么是抽象类

Java中的抽象类是一种特殊的类,他不能直接创建对象实例,而是用于作为其他类的基类或父类。抽象类通常定义了一个或多个抽象方法,这些方法只有方法签名而没有具体的实现。子类必须实现这些抽象方法才能使用抽象类

在Java中,我们可以使用abstract关键字来定义抽象类。以下是定义抽象类的示例代码:

public abstract class MyAbstractClass {

        public abstract void doSomething();

}

这个抽象类定义了一个名为MyAbstractClass的抽象类,它包含了一个叫做doSomething()的抽象方法。MyAbstractClass类没有提供任何具体的实现,只是定义了抽象方法的签名。子类需要提供doSomething()方法的具体实现。

子类可以继承抽象类,并且必须实现所有抽象方法。以下是一个示例子类:

public class MyClass extends MyAbstractClass {

        public void doSomething() {

                System.out.println("Doing something...");

        }

}

这个子类MyClass继承了MyAbstractClass抽象类,并且提供了doSomething()方法的具体实现。

抽象类可以包含具体的方法和属性,而不仅仅是抽象方法。但是,子类仍然必须实现所有抽象方法。

简单来说:提取相关子类的公共行为

特点:可以有成员变量和实现方法给子类用,有 abstracrt 关键字修饰,不能实例化

作用:提高代码复用

实现要求:

1. 一个子类必须实现其继承抽象类的全部抽象方法,否则该子类也必须被定义为抽象类

2. 抽象类中实例变量和方法可以被子类直接调用

​3. 抽象类可以有构造方法,但不能直接实例化

抽象类是Java程序设计中的一个重要概念,适用于需要多态性行为和有关系的类族。理解抽象类的概念和使用方式对于设计良好的Java程序非常重要。

3.接口与抽象类的相同点

  1. 都不能用于实例化对象,只能用作规范或者模板
  2. 都可以被实现类或子类继承或实现

4.接口与抽象类的不同点

  1. 实现方式不同:接口只能定义方法签名,不能包含实现,而抽象类可以包含具体的方法实现
  2. 关系不同:实现类可以同时实现多个接口,但只能够继承一个抽象类
  3. 成员变量不同:接口只能包含常量,不能包含成员变量;抽象类可以包含成员变量
  4. 构造器不同:接口没有构造器,而抽象类有构造器

5.常见面试题

        1.Java抽象类可以添加final修饰符吗?

回答:不可以,被声明为final的类会被阻止继承,而抽象类的作用就是用于继承。

        2.抽象类是否有构造函数,可以创建实例吗?

回答:抽象类可以有构造函数,但是不能创建实例,因为抽象类之定义了部分方法和属性,仍然存在方法需要子类去实现,所以抽象类是不完整的类,自然无法实例化

        3.Java抽象类的构造函数有什么作用?

回答:提供给子类进行初始化操作,当创建子类对象时,会优先调用子类构造函数,再调用父类构造函数(如果父类没有无参构造函数,需要子类手动调用父类有参构造函数并传递对应参数),当然,抽象类也会有默认的无参构造函数

        4.什么时候使用接口比抽象类更好

回答:当需要考虑到多继承时,例如目标类已经继承了其他类,而java并不支持继承多个类,但是允许实现多个接口,可以通过实现接口新增方法;合适的松耦合使得代码实现和接口分离;

        5.什么时候使用抽象类比接口更好

回答:抽象类能提供默认的一些实现,子类继承时可以少一些公用代码,提高了代码的可维护性;构造函数的存在可以让对象实例初始化时执行操作;

        6.抽象类和接口有什么区别?

回答:(1)抽象类要被子类继承,接口要被子类实现。(2)抽象类可以有构造方法,接口不能有构造方法。(3)抽象类可以有普通成员变量,接口中没有普通成员变量,它的变量只能时公共的静态的常量。(4)一个类可以实现多个接口,但是只能继承一个父类,这个父类可以是抽象类。(5)接口只能做方法声明,抽象类中可以做方法声明,也可以做方法实现。(6)抽象级别(从高到低):接口>抽象类>实现类。(7)抽象类主要是用来抽象类别,接口主要是用来抽象方法功能。(8)抽象类的关键字abstract,接口的关键字interface.

        7.接口可否继承接口?抽象类是否可实现接口?抽象类是否可继承实体类?

回答:都可以

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值