马士兵java架构师

您现在的位置是:架构师问答 >

架构师问答

Java中抽象方法和接口的区别?(100%能看懂)

2023-11-14 15:42:23架构师问答 本文浏览次数:1 百度已收录

本 文 目 录

下面我们将通过定义,以及关键字使用方法,和相关的代码案例,带你一步一步的了解抽象方法,与接口两者之前的区别,差异。

一、抽象方法和接口的定义

抽象方法:是抽象类中的方法,只有声明,没有具体的实现。 接口:是一种引用类型,在Java中是一个完全抽象的类,它可以包含抽象方法和常量。

二、抽象方法和接口的定义方式

// 抽象方法的定义
public abstract class AbstractClass {
    public abstract void abstractMethod();
}

// 接口的定义
public interface InterfaceExample {
    void interfaceMethod();
}

三、抽象方法和接口在使用上的区别

区别点 抽象方法 接口
声明方式 在抽象类中声明,使用abstract关键字 使用interface关键字声明
实现方式 子类继承抽象类,必须实现所有抽象方法 类实现接口,必须实现接口中的所有方法
多重继承 一个类只能继承一个抽象类 一个类可以实现多个接口
方法默认实现 抽象方法没有默认实现 接口中的方法默认为public,且没有方法体,但从Java 8开始,接口可以有默认方法和静态方法

四、抽象方法和接口在实际应用中的选择

选择抽象方法或接口通常基于以下考虑:

当你想让一个类继承某个基础功能,并在这个基础上进行扩展,使用抽象类。 例如,有一个基础的Animal抽象类,它有eat()sleep()两个抽象方法,而DogCat都继承这个抽象类并有自己的实现方式。

// 定义一个Animal抽象类  
public abstract class Animal {  
    // 声明两个抽象方法  
    public abstract void eat();  
    public abstract void sleep();  
}  

// 定义Dog类继承Animal抽象类  
public class Dog extends Animal {  
    // 实现Animal抽象类中的eat方法  
    @Override  
    public void eat() {  
        System.out.println("Dog eats dog food.");  
    }  

    // 实现Animal抽象类中的sleep方法  
    @Override  
    public void sleep() {  
        System.out.println("Dog sleeps in its house.");  
    }  
}  

// 定义Cat类继承Animal抽象类  
public class Cat extends Animal {  
    // 实现Animal抽象类中的eat方法  
    @Override  
    public void eat() {  
        System.out.println("Cat eats cat food.");  
    }  

    // 实现Animal抽象类中的sleep方法  
    @Override  
    public void sleep() {  
        System.out.println("Cat sleeps on a soft pillow.");  
    }  
}
我们创建了一个名为Animal的抽象类,它包含两个抽象方法eat()和sleep()。
然后,我们创建了Dog和Cat两个类,它们分别继承了Animal抽象类,并实现了这两个方法。
这样,每个子类都可以根据自己的特性来实现这些方法。

当你想让一个类具有某种能力,而不关心它是什么,使用接口。 例如,有一个Flyable接口,它有一个fly()方法,无论是Bird还是Airplane都可以实现这个接口,表示它们具有飞的能力。

// 定义一个Flyable接口  
public interface Flyable {  
    // 声明fly方法  
    void fly();  
}  

// 定义Bird类实现Flyable接口  
public class Bird implements Flyable {  
    // 实现Flyable接口中的fly方法  
    @Override  
    public void fly() {  
        System.out.println("Bird flies in the sky.");  
    }  
}  

// 定义Airplane类实现Flyable接口  
public class Airplane implements Flyable {  
    // 实现Flyable接口中的fly方法  
    @Override  
    public void fly() {  
        System.out.println("Airplane flies in the air.");  
    }  
}
我们创建了一个名为Flyable的接口,它包含一个fly()方法。
然后,我们创建了Bird和Airplane两个类,它们分别实现了Flyable接口,并实现了fly()方法。
这样,无论是什么类的实例,只要它实现了Flyable接口,我们就知道它具有飞的能力。