【Java基础】java接口通俗理解

2021-01-29 21:05发布

10条回答
梵梵
2楼 · 2021-02-01 11:11

(1)Java编程领域中,接口可以为不同类顺利交互提供标准。例如:老师让学生张三和李四一起完成,java程序来模拟营业员和计算器的行为。张三和李四进行工作分工,张三写计算机器,李四写营业员类。

张三和李四没有定义接口会出现的问题如下:

张三先定义了一个计算器类Calculator类并提供计算的方法,注方法的名称

public class Calculator{

public double count(doublesalary,double bonus){

return salary+bonus;

}

}

李四定义了代表营业员的Seller类:注意这里计算器的方法

class Seller{

String name;//营业员的名称

Calculator calculator;

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

我们看到李四开发的时候想使用张三已经写好的计算器的类,李四想当然的认为计算钱的方法是countMoney,但是张三写计算器的时候使用的方法是count,那么李四的写的Seller类是错误的。

实现接口的好处如下:

为了保证张三和李四的书写的类可以正确的完成交互,李四定义了一个接口,并要求张三必须实现这个接口,接口的代码如下:

interface Icount{

public double countMoney(doublesalary,double bonus);

}

那么张三在写计算器Calculator;类的时候,实现Icount接口必须重写接口中的抽象方法。那么张三的代买就应该是如下的:

public class Calculator implemenetsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

这样就李四的代码就可以正常的执行了。

(2)接口可以降低类的依赖性,提高彼此的独立性

张三现在觉得计算器类的名字改成SuperCalculator更合适那么张三写的类代码就应该如下:

public class SuperCalculator implementsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

李四的代码如下注意这里计算的使用接口来声明:

class Seller{

String name;//营业员的名称

Icount calculator; //这里使用接口声明

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

由以上的代码来看张三的类无论命名成什么李四的代码都不需要改,所以代码的依赖性降低,便于程序的维护。

(3)接口在使用的时候需要注意一下几点:

1) 接口是系统中最高层次的抽象类型。

2) 接口本身必须十分稳定,接口一旦定制,就不允许随意修改,否则对接口实现类以及接口访问都会造成影响。


py大白
3楼 · 2021-02-01 14:11

(1)Java编程领域中,接口可以为不同类顺利交互提供标准。例如:老师让学生张三和李四一起完成,java程序来模拟营业员和计算器的行为。张三和李四进行工作分工,张三写计算机器,李四写营业员类。

张三和李四没有定义接口会出现的问题如下:

张三先定义了一个计算器类Calculator类并提供计算的方法,注方法的名称

public class Calculator{

public double count(doublesalary,double bonus){

return salary+bonus;

}

}

李四定义了代表营业员的Seller类:注意这里计算器的方法

class Seller{

String name;//营业员的名称

Calculator calculator;

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

我们看到李四开发的时候想使用张三已经写好的计算器的类,李四想当然的认为计算钱的方法是countMoney,但是张三写计算器的时候使用的方法是count,那么李四的写的Seller类是错误的。

实现接口的好处如下:

为了保证张三和李四的书写的类可以正确的完成交互,李四定义了一个接口,并要求张三必须实现这个接口,接口的代码如下:

interface Icount{

public double countMoney(doublesalary,double bonus);

}

那么张三在写计算器Calculator;类的时候,实现Icount接口必须重写接口中的抽象方法。那么张三的代买就应该是如下的:

public class Calculator implemenetsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

这样就李四的代码就可以正常的执行了。


想减肥的小徐
4楼 · 2021-02-01 16:21

官方解释:

        Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

通俗理解:

        接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。(JDK1.8之前可以这样理解

    例如我们在使用空调的时候,用“空调”——“遥控器”的方式去理解多态,实际上在上面的的几个重点中的第一条讲的也是多态的实现比如,我们可以把“节能”作为一种标准,或者说节能就是一个“接口”,这个接口中有一个方法,叫做变频方法,任何空调,如果要称得上叫做节能空调的话,那么必须实现“节能”这个接口,实现“节能”这个接口,也就必须实现“节能”接口中规定实现的“变频”方法,这样才算是真正的实现了“节能”这个接口,实现了“节能”这个功能。

    当某个空调实现了“节能”接口后,这个空调就具备了节能的功能,那么我们也可以不用空调类的引用指向空调对象,我们可以直接使用一个“节能”接口类型引用的“遥控器”去指向“空调”,虽然这个“遥控器”上面只有一个按键,只有一个“变频”的方法,但是“遥控器”所指向的空调是实现了“节能”这个接口的,是有“变频”方法的实现的,我们用这个只有一个“变频”方法的遥控器去命令空调调用“变频”方法,也是行得通的



我自己打call
5楼 · 2021-02-02 09:24

日常生活中,两个实体之间进行连接的部分称为接口。如电脑和U盘连接的标准USB接口。接口可以确保不同实体之间的顺利连接。如不同的电脑厂家和U盘厂家只要按照相同的USB接口进行生产,那么所有的电脑和U盘就可以顺利的连接起来。

(1)Java编程领域中,接口可以为不同类顺利交互提供标准。例如:老师让学生张三和李四一起完成,java程序来模拟营业员和计算器的行为。张三和李四进行工作分工,张三写计算机器,李四写营业员类。

张三和李四没有定义接口会出现的问题如下:

张三先定义了一个计算器类Calculator类并提供计算的方法,注方法的名称

public class Calculator{

public double count(doublesalary,double bonus){

return salary+bonus;

}

}

李四定义了代表营业员的Seller类:注意这里计算器的方法

class Seller{

String name;//营业员的名称

Calculator calculator;

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

我们看到李四开发的时候想使用张三已经写好的计算器的类,李四想当然的认为计算钱的方法是countMoney,但是张三写计算器的时候使用的方法是count,那么李四的写的Seller类是错误的。

实现接口的好处如下:

为了保证张三和李四的书写的类可以正确的完成交互,李四定义了一个接口,并要求张三必须实现这个接口,接口的代码如下:

interface Icount{

public double countMoney(doublesalary,double bonus);

}

那么张三在写计算器Calculator;类的时候,实现Icount接口必须重写接口中的抽象方法。那么张三的代买就应该是如下的:

public class Calculator implemenetsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

这样就李四的代码就可以正常的执行了。

(2)接口可以降低类的依赖性,提高彼此的独立性

张三现在觉得计算器类的名字改成SuperCalculator更合适那么张三写的类代码就应该如下:

public class SuperCalculator implementsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

李四的代码如下注意这里计算的使用接口来声明:

class Seller{

String name;//营业员的名称

Icount calculator; //这里使用接口声明

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

由以上的代码来看张三的类无论命名成什么李四的代码都不需要改,所以代码的依赖性降低,便于程序的维护。

(3)接口在使用的时候需要注意一下几点:

1) 接口是系统中最高层次的抽象类型。

2) 接口本身必须十分稳定,接口一旦定制,就不允许随意修改,否则对接口实现类以及接口访问都会造成影响。


20200921文 - 做更棒的自己!
6楼 · 2021-02-02 11:07

我看到过一个关于接口的描述:

接口实际上是表示一种能力,你可以看看jdk中的一些接口,比如说

cloneable

runable

等等,就是告诉你这个对象可以克隆,这个对象能够启动线程。

多重继承嘛,可以理解为这个类有多重能力。


猜不到结尾
7楼 · 2021-02-02 12:05

我看到过一个关于接口的描述:

接口实际上是表示一种能力,你可以看看jdk中的一些接口,比如说

cloneable

runable

等等,就是告诉你这个对象可以克隆,这个对象能够启动线程。

多重继承嘛,可以理解为这个类有多重能力。


苏酒儿
8楼 · 2021-02-03 16:44

接口,它的关键词是interface,用来在软件开发工程中进行定义规范的,接口内定义的方法只能是抽象方法,1.8jdk之后,接口中添加了静态方法和默认方法。

我的网名不再改
9楼 · 2021-02-04 10:05

日常生活中,两个实体之间进行连接的部分称为接口。如电脑和U盘连接的标准USB接口。接口可以确保不同实体之间的顺利连接。如不同的电脑厂家和U盘厂家只要按照相同的USB接口进行生产,那么所有的电脑和U盘就可以顺利的连接起来。

(1)Java编程领域中,接口可以为不同类顺利交互提供标准。例如:老师让学生张三和李四一起完成,java程序来模拟营业员和计算器的行为。张三和李四进行工作分工,张三写计算机器,李四写营业员类。

张三和李四没有定义接口会出现的问题如下:

张三先定义了一个计算器类Calculator类并提供计算的方法,注方法的名称

public class Calculator{

public double count(doublesalary,double bonus){

return salary+bonus;

}

}

李四定义了代表营业员的Seller类:注意这里计算器的方法

class Seller{

String name;//营业员的名称

Calculator calculator;

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

我们看到李四开发的时候想使用张三已经写好的计算器的类,李四想当然的认为计算钱的方法是countMoney,但是张三写计算器的时候使用的方法是count,那么李四的写的Seller类是错误的。

实现接口的好处如下:

为了保证张三和李四的书写的类可以正确的完成交互,李四定义了一个接口,并要求张三必须实现这个接口,接口的代码如下:

interface Icount{

public double countMoney(doublesalary,double bonus);

}

那么张三在写计算器Calculator;类的时候,实现Icount接口必须重写接口中的抽象方法。那么张三的代买就应该是如下的:

public class Calculator implemenetsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

这样就李四的代码就可以正常的执行了。

(2)接口可以降低类的依赖性,提高彼此的独立性

张三现在觉得计算器类的名字改成SuperCalculator更合适那么张三写的类代码就应该如下:

public class SuperCalculator implementsIcount{

public double countMoney(doublesalary,double bonus){

return salary+bonus;

}

}

李四的代码如下注意这里计算的使用接口来声明:

class Seller{

String name;//营业员的名称

Icount calculator; //这里使用接口声明

public Seller(String name, Calculatorcalculator) {

super();

this.name = name;

this.calculator = calculator;

}

//计算的方法

public void quote(double salary,doublebonus){

System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary,bonus)+"元。");

}

}

由以上的代码来看张三的类无论命名成什么李四的代码都不需要改,所以代码的依赖性降低,便于程序的维护。

(3)接口在使用的时候需要注意一下几点:

1) 接口是系统中最高层次的抽象类型。

2) 接口本身必须十分稳定,接口一旦定制,就不允许随意修改,否则对接口实现类以及接口访问都会造成影响。


相关问题推荐

  • 回答 156

    对于每一位才开始接触JAVA的新手来说,先不要管算法和数据结构,大多数简单的程序不需要用到算法和数据结构,所以当你真正需要时再去学习。编程一段时间以后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,然后动手去实践。当我们在去...

  • 回答 93

    2个都很好就业,更关键的是要学得到东西

  • 回答 12
    已采纳

    获取Map集合中所有的key可以通过map集合的keySet()方法获取例如:    Map map = new HashMap();    map.put(xx,xx); //存放数据    //.... 省略    Set set = map.keySet();    //可以通过迭代器进行测试    Iterator iter = set.iter...

  • 回答 56
    已采纳

    不同年龄,不同掌握程度,学历,找工作城市,面试能力这是一个多方面影响的结果,如果是平均值的话,全国平均薪资14k左右

  • 回答 38

    具体学多久,根据自己的学习力,自律性、解决问题能力来决定若系统性学习,跟着讲师的节奏走,大概半年左右,有专业的讲师把课程进行规划,尽心系统学习,有问题,讲师会帮忙解决,学习的效率很高,避免了自学中出现各种问题解决不了,而耽误很多时间,可能会...

  • 回答 23
    已采纳

    (1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...

  • BIO与NIO、AIO的区别2020-05-19 15:59
    回答 4
    已采纳

    IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO     在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要...

  • Java方法的命名规则2021-04-06 19:07
    回答 31

    ava是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包、类、变量等的命名规范。(一)Package(包)的命名Package的名字应该都是由一个小写单词组成,例如com、xuetang9、compan...

  • 回答 2

    public class Point {    private int x;    private int y;    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    } ...

  • 回答 6

    经典版单例模式public class Singleton {        private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。     private Singleton() {     }     public static  Singleton getInstance()...

  • 回答 3

    哈希表的长度一般是定长的,在存储数据之前我们应该知道我们存储的数据规模是多大,应该尽可能地避免频繁地让哈希表扩容。但是如果设计的太大,那么就会浪费空间,因为我们跟不用不到那么大的空间来存储我们当前的数据规模;如果设计的太小,那么就会很容易发...

  • 回答 14

    1. DOM(Document Object Model)        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才...

  • 回答 19

    1)作用不同: throw用于程序员自行产生并抛出异常; throws用于声明在该方法内抛出了异常2) 使用的位置不同: throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表的后面,不能单独使用。3)内容不同: throw抛出一个异常对象,且只能是...

  • 回答 11

    基本执行过程如下:1)程序首先执行可能发生异常的try语句块。2)如果try语句没有出现异常则执行完后跳至finally语句块执行;3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。4)catch语句块可以有多个,分别捕获不同类型...

  • 回答 20

    100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...

  • 回答 16

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译...

没有解决我的问题,去提问