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();
}
}
...全文
637 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的目标是类而不是接口

62,614

社区成员

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

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