JAVA抽象类和接口的区别 使用场景等

如果文章内有错误,欢迎指正

一.抽象类

在开发过程中抽象的使用场景,我觉得在以下几个地方:
(1)在协同开发的时候,好多功能需要共用一个方法,那这个时候我们就需要有人来定义抽象类,来规范共用的代码。
(2)我们需要用到现成的方法,或者改写一些方法时,就要用到抽象类

定义抽象类:

package com.test;

public abstract class Facroty {

    String runName;
    
    public void run(String str) {
        this.runName=str; //跑的动作
    }

    public void getRun(){
        String company="小明公司的"; //默认实现,一些共用
        System.out.println(company+this.runName);//调用某一个方法
    }

}

继承抽象类:

package com.test;

public class test {

    public static void main(String[] args)  {
        Car car= new Car();
        car.run("汽车在跑");
        car.getRun();

        Ship ship = new Ship();
        ship.run("轮船在跑");
        ship.getRun();

        Bike bike = new Bike();
        bike.getRun();
    }
}


class Car extends Facroty{
    @Override
    public void run(String str) {
        super.run(str);
    }
}


class Ship extends Facroty{
    @Override
    public void run(String str) {
        super.run(str);
    }
}

class Bike extends Facroty{
    @Override
    public void run(String str) {
        super.run(str);
    }

    @Override
    public void getRun() {
       System.out.println("没有调用父抽象类,自己的公司自行车在跑");
    }
}

结果:
在这里插入图片描述

二.接口

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

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

3、维护、拓展性:比如有一个类,实现了某个功能,突然有一天,发现这个类满足不了需求了,然后又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。

例如两个开发者,开发时间完全不一致,那么需要两个人的配合开发,则需要一个人讲接口写好,定义好其中所有的变量命名规范、函数定义规范。具体实现类的开发人员则只需要按照接口实现相应功能即可。

interface TestApi {
    public void CPU();

    public void memory();
}
public interface TestApi2 {

    public void keyboard();

    public void mouse();
}

public class test {

    public static void main(String[] args)  {

    
        //接口第一种常用方法
        UseComputer useComputer=new UseComputer();
        useComputer.getMethod(new Computer());

        //接口第二种常用方法
        useComputer.getMethod(new TestApi() {
            @Override
            public void CPU() {
                System.out.println("我是CPU2");
            }

            @Override
            public void memory() {
                System.out.println("我是内存2");
            }
        });

    }

}


class UseComputer{
    public void getMethod(TestApi testApi){
        testApi.CPU();
    }
}


class Computer implements TestApi,TestApi2{

    @Override
    public void CPU() {
        System.out.println("我是CPU");
    }

    @Override
    public void memory() {
        System.out.println("我是内存");
    }

    @Override
    public void keyboard() {
        System.out.println("我是键盘");
    }

    @Override
    public void mouse() {
        System.out.println("我是鼠标");
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值