关于java接口类方法调用的问题。
接口类里面的方法不能有方法体,可是为什么可以这么写:VolumeControlvolumecontrol=(VolumeControl)player.getControl...
接口类里面的方法不能有方法体,可是为什么可以这么写:
VolumeControl volumecontrol=(VolumeControl)player.getControl("VolumeControl");
volumecontrol.getLevel();//关键是这句
我不明白是怎么回事,我没有继承VolumeControl的类,也就不可能重写getLevel()这个函数,按理说getLevel()或者setLevel(int a)等等这些VolumeControl接口的方法都是空的才对啊,为什么我可以直接创建一个接口类型的变量然后调用他们呢?为什么空的方法体却可以实现功能呢?比如这个setLevel(int a) 他确实可以改变音量,可这个方法按理说是个空的啊。。。。求教各位大侠,这是怎么回事。。。 展开
VolumeControl volumecontrol=(VolumeControl)player.getControl("VolumeControl");
volumecontrol.getLevel();//关键是这句
我不明白是怎么回事,我没有继承VolumeControl的类,也就不可能重写getLevel()这个函数,按理说getLevel()或者setLevel(int a)等等这些VolumeControl接口的方法都是空的才对啊,为什么我可以直接创建一个接口类型的变量然后调用他们呢?为什么空的方法体却可以实现功能呢?比如这个setLevel(int a) 他确实可以改变音量,可这个方法按理说是个空的啊。。。。求教各位大侠,这是怎么回事。。。 展开
5个回答
展开全部
public class Demo {
public static void main(String[] args) {
People people = PeopleFactory.getPeople();
people.sayHello();
}
}
interface People {
void sayHello();
}
class PeopleFactory {
public static People getPeople() {
return new Chinese();
}
}
class Chinese implements People {
public void sayHello() {
System.out.println("你好");
}
}
先看上面的代码。
然后把后两个类藏起来。
public class Demo {
public static void main(String[] args) {
People people = PeopleFactory.getPeople();
people.sayHello();
}
}
interface People {
void sayHello();
}
是不是感觉不好理解了?实际上VolumeControl已经有实现了,不过不是你实现的罢了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
player.getControl("VolumeControl"); 这个返回的就是VolumeControl接口的实现
了解一下多态的概念
了解一下多态的概念
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题在于你的player对象的getControl返回的是你VolumeControl的一个实现类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没有实现这个类,但是在API中已经有人帮你实现了,只不过你看不到,用的时候只需要调用即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询