Java接口不能实例化吗?

hsf1002 2016-06-01 07:48:05
部分代码如下,标红的部分,不太理解

public interface ICommand {

void command();
}


public class CommandOpen implements ICommand{

@Override
public void command() {
// TODO Auto-generated method stub
TV.createTvInstance().open();
}
}


public class CommandClose implements ICommand{

@Override
public void command() {
// TODO Auto-generated method stub
TV.createTvInstance().close();
}

}


public class CommandChangeChannel implements ICommand{

@Override
public void command() {
// TODO Auto-generated method stub
TV.createTvInstance().changeChannel();
}

}



public class Controller {

// 将该类原本的CommandOpen换成ICommand, CommandClose换成ICommand, CommandChangeChannel换成ICommand也可以编译通过并运行结果无误


ICommand cmdOpen;
ICommand cmdClose;
ICommand cmdchange;

// 初始化传进来的是new出来的对象,这种方式不是实例化接口吗?
Controller(ICommand cmdOpen, ICommand cmdClose, ICommand cmdchange)
{
this.cmdOpen = cmdOpen;
this.cmdClose = cmdClose;
this.cmdchange = cmdchange;
}

public void open()
{
cmdOpen.command();
}

public void close()
{
cmdClose.command();
}

public void changeChannel()
{
cmdchange.command();
}

}

public class TV {
private static TV sTv;

public void open()
{
System.out.print("open tv. \n");
}

public void close()
{
System.out.print("close tv. \n");
}

public void changeChannel()
{
System.out.print("change tv. \n");
}

private TV()
{
}

public static TV createTvInstance()
{
if (sTv == null)
sTv = new TV();

return sTv;
}
}

public class Client {

public static void main(String[] args) {

CommandOpen cmdOpen = new CommandOpen();
CommandClose cmdClose = new CommandClose();
CommandChangeChannel cmdchange = new CommandChangeChannel();

Controller c = new Controller(cmdOpen, cmdClose, cmdchange);
c.open();
c.close();
c.changeChannel();
}
}
...全文
720 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwer_boo 2016-06-06
  • 打赏
  • 举报
回复
跟我之前的疑惑一样,其实你说的这种情况就是多态
IT界的渣 2016-06-05
  • 打赏
  • 举报
回复
接口只能实现,不能直接实例化!
lyfuci 2016-06-04
  • 打赏
  • 举报
回复
匿名内部类算接口实例化吗?不过正常写代码是不能的。
day_moon 2016-06-03
  • 打赏
  • 举报
回复
接口本身不能实例化,接口的实现类(非抽象类)可以实例化。看看多态吧。
tangxheng 2016-06-03
  • 打赏
  • 举报
回复
同样,用上面的理解,也好理解,可以多实现,而不能多继承了。 即可以有多个特性,但不能是多类东西: 比如会飞,且有翅膀是一组特性,那么有尖嘴,会叫是另一组特性。 这样,比如燕子可以拥有上面两组特性,即对接口有多实现。 而燕子是鸟,那么,他就不能再是鸟人了。即只能单继承。
鬼狐柒 2016-06-03
  • 打赏
  • 举报
回复
这样理解,假如说有一个接口是Fly,这个是飞,你可以认为它是一个功能,飞能有对象吗?所以接口是不能被实例化的
tangxheng 2016-06-03
  • 打赏
  • 举报
回复
你可以这样理解: 接口是指一组特性,类是指一类东西。 而会飞,且有翅膀可以是一组特性————这个没办法实例化一只真实的鸟,因为也可能是鸟人(没有具体指明是什么) 比如鸟是一个类,指一类东西————这个可以实例化一只真实的鸟 那么你的东西好理解了。入参是要求可以这样说: 传一只鸟进来,或都说传一个会飞且有翅膀的东西进来即可。 那你这里是用第二种说法,但传进来的可以是一只鸟,也可以是鸟人,反正肯定是一个真正的对像是吧。
爱睡觉的阿狸 2016-06-02
  • 打赏
  • 举报
回复
接口本身不能实例化,接口的实现类(非抽象类)可以实例化,另外,如果只是想临时用个接口的实现,也可以用匿名内部类: 比如:
new Thread(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("hw");
			}
		}).start();
killua1987 2016-06-02
  • 打赏
  • 举报
回复
父类应用指向子类对象啊
菜 头 2016-06-02
  • 打赏
  • 举报
回复
看看多态。。。
易百洋 2016-06-02
  • 打赏
  • 举报
回复
实现的子类可以实例化!这就是多态
平平定 2016-06-02
  • 打赏
  • 举报
回复
接口是规范,可以有多种实现。
Ordinary-1995 2016-06-01
  • 打赏
  • 举报
回复
接口是不可以实例化的,初始化传进来的是new出来的对象没错,但new的目标是类而不是接口
内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧