Java接口不能实例化吗?

hsf1002 hsf1002 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
部分代码如下,标红的部分,不太理解

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();
}
}
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
hsf1002
Java SE 62,621 成员 307,251 内容