问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中“implements”是什么意思?在什么时候使用?

发布网友 发布时间:2022-04-13 02:06

我来回答

2个回答

懂视网 时间:2022-04-13 06:27

HP 类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此 PHP 引入了类的接口技术。

如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是 public 权限的,那么这种特殊的抽象类就叫 接口 。

接口使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,且必须完全实现。

类中接口的应用

1.关键字:interface

2.关键字:implements

1.接口的介绍与创建

接口:一种成员属性全部为抽象或常量的特殊抽象类。

规则:

1.类中全部为抽象方法。

2.抽象方法钱不用加abstract。

3.接口抽象方法属性为public。

4.成员属性必须为常量。

格式代码如下:

interface demo { 
const NAME = "常量对象属性"; 
function myfun1(); //抽象方法
function myfun2(); //抽象方法,不用具体写入逻辑 
}

一,接口的定义和调用

<?php
interface Cinema
{
 const film = '加勒比海盗';
 public function show();
}
class Order implements Cinema
{
 public function show()
 {
 echo "影院 接口开放了<br>";
 }
}
$face = new Order();
echo $face->show(); 
echo Cinema::film;

说明:上面的例子要注意一点,接口的方法名是show,继承接口的类中必须有show这个方法,不然就会报错。也就是说接口的方法是假的,真正起作用的是在继承的类中的方法,这里接口和php的抽象类是不是有点像了?

二,对参数约束比较严

<?php
interface Cinema
{
 public function show(Order $show,$num);
}
// 显示正常
class Order implements Cinema
{
 public $number='0011排';
 public function show(Order $show,$num)
 {
 echo $show->number.$num;
 }
}
$face= new Order();
$face->show(new Order,$num='3人');//
输出 0011排3人

说明:上面的这个例子继承接口类中,调用接口的方法时,所传参数要和接口中的参数名要一至。不然就会报错。

三,接口间的继承和调用接口传递参数

<?php
interface Cinema
{
 public function show();
}
interface Cinema1 extends Cinema
{
 public function show1(Order1 $object,$num);
}
class Order implements Cinema1
{
 public function show()
 {
 echo "准备就绪<br>";
 }
 public function show1(Order1 $object,$num)
 {
 //var_dump($object);
 echo $object->number."$num<br>";
 }
}
class Order1
{
 public $number="0012排";
 function fun(){
 echo ' =================';
 }
}
$show = new Order1;
$show->fun(); 
$test = new Order();
$test->show(); 
$test->show1($show,$num='6人');
// 
输出 ===============准备就绪0012排6人

说明:上面的例子可以看到,接口Cinemal1继承了接口Cinemal,类Order继承了接口Cinemal1。不知道你发现没有,class类Order当中包括有二个方法,一个是show,一个show1,并且一个也不能少,如果少一个,报fatal错误。show1(Order1 $object,$num)中的Order1必须根继承类的名子要一样class Order1。如果不一样,也会报fatal错误。那如果一个接口被多个类继承,并且类名又不一样,怎么办呢?那就要用self了,下面会提到

四,一个接口多个继承

<?php
interface demo {
 const NAME = "电影名称";
 function fun1();
 function fun2();
}
interface demo2 {
 function fun3();
 function fun4();
}
interface demo3 {
 const TEST = "这里是测试Test";
 function fun5();
}
class MyDemo implements demo, demo2 {
 function fun1() {
 echo "你好";
 }
 function fun2() {
 echo "----------";
 }
 function fun3() {
 echo "我也好<br />";
 }
 function fun4() {
 echo "大家都好<br />";
 }
}
class YourDemo extends MyDemo implements demo3 {
 function fun5() {
 echo "继承类后引用接口";
 }
}
$p = new YourDemo;
$p->fun1();
$p->fun2();
$p->fun3();
$p->fun4();
$p->fun5();

以上输出

你好----------我也好

大家都好

继承类后引用接口

上面的例子中我们可以看到接口都使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,再举个例子:

<?php
//定义接口
interface User{
 function getDiscount();
 function getUserType();
}

class VipUser implements User{ //VIP用户 接口实现
 private $discount = 0.8; // VIP 用户折扣系数
 function getDiscount() {
 return $this->discount;
 }
 function getUserType() {
 return "VIP用户";
 }
}
class Goods{
 var $price = 88;
 var $vc;
 function run(User $vc){ //定义 User 接口类型参数,这时并不知道是什么用户
 $this->vc = $vc;
 $discount = $this->vc->getDiscount();
 $usertype = $this->vc->getUserType();
 echo $usertype."商品价格:".$this->price*$discount;
 }
}
$display = new Goods();
$display ->run(new VipUser); //VIP用户商品价格:70.4

这个例子演示了一个 PHP 接口的简单应用。该例子中,User 接口实现用户的折扣,而在 VipUser 类里面实现了具体的折扣系数。最后商品类 Goods 根据 User 接口来实现不同的用户报价.

最后总结下:

抽象类和接口的区别

接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:

1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。

2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。

3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

热心网友 时间:2022-04-13 03:35

implements 是实现某个接口的意思。

如果某个类 后面使用 implements,并指定了相应的接口,那在该类下面就需要实现相应接口的方法。
比如:接口interface java.lang.Comparable 下面定义了一个虚方法 public int compareTo(T o),
如果某个类这样写
public XXX implements Comparable{

@Override
public int compareTo(T o) {
这里就是必须实现的比较方法
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 没有代码基础,jmeter能学得会吗 想学习jmeter,有没有好书推 荐一下 请问新用户如何申请 大写的“马”有多少画? 用电脑怎么申请? 马几笔几画 马字一共几画怎么写 马字有多少画? 怎么申请新的 马字多少笔画 马字有几画。 马有几笔画 马多少笔画? 马字多少画 马字是几画 马有几画怎么写 马这个字一共几画 社保断交多久会作废? 我想申请一个怎么申请的 罗威纳犬。怎么样啊 蚂蚁的触角是羽状,棒状,鞭状还是丝状的? 蚂蚁的触角是什么形状 蚂蚁的触角像什么? 如何调试带参数的控制台程序 如何调试带参数的控制台程序(QT+OSG为例) 关于C# 控制台应用程序的运行和调试的疑问! angular.js在控制台怎么调试 使用vs2019编写控制台程序调试时怎样能使程序按下control c不产生中断? 如何使用控制台调试工具对网页字符编码进行转换 C#中控制台应用程序调试窗口一会就没了 vs2005如何调试运行控制台应用程序? 带有命令行的c++控制台程序如何单步调试? java控制台怎么单步调试 博客园 为什么word保存特别慢,还带红叉? 为什么QQ绑定手机安全中心不需要手机验证码,就直接绑定了 绑定了的qq登陆qq空间要不要短信验证码 qq关联需要短信验证码 为什么收不到 为什么QQ号关联的时候要验证,验证的手机号和密保不一样? 我关联女友qq过程中,为何要对方手机号码验证码,? 被盗了怎么办怎么找回来?