当前位置: 首页 > news >正文

Java——抽象方法抽象类 接口 详解及综合案例

1.抽象方法抽象类


介绍

抽象方法:

将共性的行为(方法)抽取到父类之后,
由于每一个子类执行的内容是不一样,
所以,在父类中不能确定具体的方法体
该方法就可以定义为抽象方法。

抽象类:

如果一个类中存在抽象方法,那么该类就必须声明为抽象类 


定义格式

 抽象方法:

public abstract 返回值类型方法名(参数列表); //没有方法体

抽象类:

public abstract class 类名{}


 注意事项

1.抽象类不能实例化
2.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
3.抽象类可以有成员变量,构造方法
4.抽象类的子类,要么重写抽象类中的所有抽象方法,要么是抽象类


 抽象方法抽象类的意义

可以强制子类按照抽象方法定义的格式重写,方便调用不同子类的该方法。


2.接口 


介绍

接口就是一种规则,是对行为的抽象,哪个类具有该行为就实现对应的接口。


接口的定义和使用

接口用关键字interface来定义

public interface 接口名{}

接口和类之间是实现关系,通过implements关键字表示

public class 类名 implements 接口名{}


注意事项

1.接口不能实例化
2.接口的子类(实现类),要么重写接口中的所有抽象方法,要么是抽象类
3.接口和类的实现关系,可以单实现,也可以多实现。
   public class 类名 implements 接口名1,接口名2 { }
4.实现类还可以在继承一个类的同时实现多个接口。
   public class 类名 extends父类implements接口名1,接口名2 { }


接口中成员的特点

成员变量:

只能是常量
默认修饰符: public static final

构造方法:

没有

成员方法:

只能是抽象方法
默认修饰符: public abstract
JDK7以前:接口中只能定义抽象方法  (之后会讲解JDK7以后的新特性)


接口和类之间的关系

类和类的关系:

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

类和接口的关系:

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

注:如果多个接口中具有相同的抽象方法method1,则类在同时实现多个接口后,只需重写         一次method1方法。

接口和接口的关系:

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

注:如果接口A继承了其他接口,那么类在实现接口A后,需要重写包括接口A和其他接口在         内的所有抽象方法


 3.综合案例


案例需求

编写带有接口和抽象类的标准Javabean类

我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所有知识分析,在这个案例中,哪些是具体类,哪些是抽象类,哪些是接口?

乒乓球运动员:姓名,年龄,学打乒乓球,说英语
篮球运动员:姓名,年龄,学打篮球
乒乓球教练:姓名,年龄,教打乒乓球,说英语
篮球教练:姓名,年龄,教打篮球


分析


代码实现 

Person类

//不想让外界创建人的对象,因为创建人的对象是无意义的
//因此可以将其定义为抽象类
public abstract class Person {
    private String name;
    private int age;

    public Person(){}

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Player类

public abstract class Player extends Person{

    public Player(){}

    public Player(String name,int age){
        super(name,age);
    }

    //学习
    public abstract void study();
}

Coach类

public abstract class Coach extends Person{

    public Coach() {
    }

    public Coach(String name, int age) {
        super(name, age);
    }

    //教学
    public abstract void teach();
}

SpeakEnglish接口

public interface SpeakEnglish {

    public abstract void SpeakEnglish();

}

PingPangPlayer类

public class PingPangPlayer extends Player implements SpeakEnglish{

    public PingPangPlayer(){}

    public PingPangPlayer(String name,int age){
        super(name,age);
    }

    @Override
    public void study() {
        System.out.println("乒乓球运动员"+getName()+"在学习打乒乓球");
    }

    @Override
    public void SpeakEnglish() {
        System.out.println("乒乓球运动员"+getName()+"在说英语");
    }
}

BasketballPlayer类

public class BasketballPlayer extends Player{

    public BasketballPlayer() {
    }

    public BasketballPlayer(String name, int age) {
        super(name, age);
    }

    @Override
    public void study() {
        System.out.println("篮球运动员"+getName()+"在学习打篮球");
    }

}

PingPangCoach类

public class PingPangCoach extends Coach implements SpeakEnglish{

    public PingPangCoach() {
    }

    public PingPangCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("乒乓球教练"+getName()+"在教打乒乓球");
    }

    @Override
    public void SpeakEnglish() {
        System.out.println("乒乓球教练"+getName()+"在说英语");
    }
}

BasketballCoach类

public class BasketballCoach extends Coach{

    public BasketballCoach() {
    }

    public BasketballCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("篮球教练"+getName()+"在教打篮球");
    }

}

测试类

public class test {
    public static void main(String[] args) {

        PingPangPlayer ppp = new PingPangPlayer("马龙",30);
        ppp.study();
        ppp.SpeakEnglish();

        PingPangCoach ppc = new PingPangCoach("刘教练",50);
        ppc.teach();
        ppc.SpeakEnglish();

        BasketballPlayer bp = new BasketballPlayer("kobe",40);
        bp.study();

        BasketballCoach bc = new BasketballCoach("王教练",45);
        bc.teach();

    }
}

相关文章:

  • 从零到一:基于DeepSeek-R1的智能贪吃蛇开发实战
  • 【JAVA】常用的JDK8、JDK17 以及 JDK21 的主要新特性和演进过程
  • Ubuntu22安装docker28
  • .DS_Store文件泄露、.git目录泄露、.svn目录泄露漏洞利用工具
  • 驱动-字符设备驱动框架
  • Java学习手册:JVM、JRE和JDK的关系
  • 宇视设备视频平台EasyCVR打造智慧酒店安防体系,筑牢安全防线
  • openEuler Mugen 测试框架
  • 从PDF中提取表格:以GB/T2260—2007为例
  • js实现生肖宜忌展示
  • Linux重启命令(Linux Restart Command)
  • JS包装类型Array
  • 发票查验与OCR识别:财务流程的智慧双保险
  • java+postgresql+swagger-单表批量和循环insert、delete操作(八)
  • 人工智能:GPT技术应用与未来展望
  • c++进阶之----c++11(包装器)
  • Elasticsearch 官网阅读学习笔记01
  • SpringBoot 数据库MySql的读写分离 多数据源 Shardingsphere高并发优化
  • go游戏后端开发33:解散房间
  • Vue3+TS——打造AIVista Image Studio的在线生图工具