【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

一、业务场景

📣 问题描述:Java类实现某个接口后,是否需要实现接口中的所有方法?

📖 答 : 如果是普通的类,必须去实现接口里所有的方法,如果是抽象类,则可以不去实现。

java 接口默认方法 实现类不能super调用 java接口可以不实现吗_抽象类

首先定义一个卖火车票的接口:定义两个方法

java 接口默认方法 实现类不能super调用 java接口可以不实现吗_经验分享_02


创造一个类来实现买票接口,先实现一个方法,很明显idea给出提示爆红

Class 'TrainStation' must either be declared abstract or implement abstract method 'pay()' in 'SellTickets'

java 接口默认方法 实现类不能super调用 java接口可以不实现吗_java_03


继续实现第二个方法后发现idea去除爆红

java 接口默认方法 实现类不能super调用 java接口可以不实现吗_java_04


我们发现如果该类是抽象类不实现对应方法也不会爆红

java 接口默认方法 实现类不能super调用 java接口可以不实现吗_abstract_05


如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!

📝 相关代码感兴趣实践运行

public interface SellTickets {

    void sell();

    void pay();

}
/**
 * @version v1.0
 * @ClassName: TrainStation
 * @Description: 火车站类
 * @Author:
 */
public class TrainStation implements SellTickets {

    public void sell() {
        System.out.println("火车站卖票");
    }

    @Override
    public void pay() {
         System.out.println("实现pay方法");
    }

}

二、抽象类学习

📖 Java中抽象类就是使用abstract关键字修饰的一种特殊的类,抽象类可以不去实现接口的抽象方法,可以由继承这个抽象类的子类去实现。

抽象类:包含抽象方法的类。如果一个类包含抽象方法,那么该类必须是抽象类,使用 abstract 关键字修饰

public abstract class 类名 {
    //抽象类中可以包含变量、常量,抽象方法,非抽象方法
}

案例学习

public abstract class Person {
    public abstract void play();
}

抽象类不能实例化,不能直接创建对象。抽象类是用来被继承的,继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类,使用 abstract 关键字修饰


抽象方法:抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型,方法名称和所需要的参数,没有方法体,也就是说抽象方法只需要声明而不需要事先,当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract

修饰符 abstract 返回值类型 方法名(参数列表);
public abstract void play();

抽象方法不能用private、final、static、native修饰

注意事项:抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类,抽象类本身不具备实际的功能,只能用于派生其子类,抽象类中可以包含构造方法,但是构造方法不能被声明为抽象,抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。


📝抽象类与普通类的区别

  • 抽象类使用abstract修饰;普通类没有abstract修饰
  • 抽象类不能实例化;普通类可以实例化
  • 抽象类可以包含抽象方法,也可以包含非抽象方法;普通类不能有抽象方法


📚愿我们奔赴在各自的热爱里!