接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
成都创新互联专注于企业全网整合营销推广、网站重做改版、定远网站定制设计、自适应品牌网站建设、H5网站设计、商城系统网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为定远等各大城市提供网站开发制作服务。
示例代码:
interface People{ //接口
void peopleList();
}
class Student implements People{ //接口实现类
public void peopleList(){ //实现接口方法
System.out.println("I'm a student.");
}
}
class Teacher implements People{ //接口实现类
public void peopleList(){ //实现接口方法
System.out.println("I'm a teacher.");
}
}
public class Example{
public static void main(String args[]){
People a; //声明接口变量
a=new Student(); //实例化,接口变量中存放对象的引用
a.peopleList(); //接口回调
a=new Teacher(); //实例化,接口变量中存放对象的引用
a.peopleList(); //接口回调
}
}
输出结果:
I’m a student.
I’m a teacher.
举个面积的例子:在java中,定义一个接口,声明计算长方形面积和周长的抽象方法,再用一个类去实现这个接口,再编写一个测试类去使用这个接口。首先,接口必须单独存放,如果我们用eclipse编程的话,它们提示:The public type **** must be defined in its own file,意思是必须要定义在其自己的文件中,所以要为接口文件单独存放起来,举例,我们的接口要实现获到矩形的长,宽,面积,周长,所以定义以下的接口。public interface calrect {
public abstract int calarea();
public abstract int calgirth();
public abstract int getx();
public abstract int gety();
}注意,定义接口就像定义类一样,接口的访问控制符只能用public,用public定义的接口可以被所有的类和包引用,而缺省的则只能被同一个包中的其他类和接口引用,这符合JAVA中访问控制符的一般要求,关于接口再引用其他接口则是后话。以上接口文件名为calrect.java.另外需要指出的是接口中不能给方法给出方法体。接下来,需要定义一个类来实现接口,因为不知道JAVA的内置矩形类是什么名,所以为了安全,将该类定义为RRect,这可以认为是一种安全策略。关于implements,可以参考其他资料。该类引用了接口calrect,所以必须对calrect中的方法一一实现。//定义矩形类 应用接口class RRect implements calrect{private int x;
private int y;public RRect (){
x=3;y=4;
}
public int calarea(){
return x*y;
}
public int calgirth(){
return x*2+y*2;
}
public int getx(){
return x;
}
public int gety(){
return y;
}
}//接下来,定义一个测试类,所谓测试类,我理解为定义一个类,在其定义类RRect的对象,并验证其中的方法,看看是不是可以正常使用//定义Class1类
public class Class1{
RRect rect;
public static void main(String []args){
RRect rect=new RRect();
System.out.println("矩阵的长"+ rect.getx());
System.out.println("矩阵的宽"+ rect.calarea());
System.out.println("矩阵的面积"+ rect.calarea());
System.out.println("矩形的周长 "+rect.calgirth());
}
}运行结果:矩阵的长3
矩阵的宽12
矩阵的面积12
矩形的周长 14注:接口单存放,接口实现类和测试类可以存放在一个文件中
//接口
public interface BankCard {
public void norm();
}
//工商银行实现类
public class ICBCBankCard implements BankCard {
@Override
public void norm() {
// TODO 银行规范
}
public void saveMoney(int money){
//TODO 执行存钱动作
}
public void transfer(String account,int money){
//TODO 执行转账 动作
}
}
//交通银行实现类
public class CommunicationsBankCard implements BankCard {
@Override
public void norm() {
// TODO 银行规范
}
public void saveMoney(int money){
//TODO 执行存钱动作
}
public void transfer(String account,int money){
//TODO 执行转账 动作
}
}
上面的例子只是申明了通用的规范,如果想让实现类都能实现存钱和转账功能,可以在接口里面声明这两个方法,写一个通用的实现类,实现这些方法,然后具体的子类继承该通用类,这样可以直接继承父类方法,如果不同的银行具体实现不同,可以复写父类中的两个方法。
OK的,楼主,我运行过了,如下:
interface DriveControl {
void startEngine();
}
interface Repairable {
void repair();
}
public class Car implements DriveControl, Repairable {
String model;
public Car() {
System.out.println("Car init");
}
public Car(String model) {
this.model = model;
}
void printModel() {
System.out.println("The model of this car is" + this.model);
}
public void startEngine() {
System.out.println("Start engine");
}
public void repair() {
System.out.println("Car is repaired");
}
public static void main(String[] args) {
Car car = new Car();
DriveControl control = (DriveControl) car;
control.startEngine();
Repairable repairable = (Repairable) car;
repairable.repair();
}
}
运行结果:
Car init
Start engine
Car is repaired
附上一图,希望能够帮上你的忙。
通过附图,我们可以了解到 DY是接口,它被两个子类实现,分别是 softstudent, softschool。其中 softschool 还自定义了一个方法名叫 print,参数便是DY接口,所以能够对softstudent 进行输出。
String content 表示的是参数名叫content,它的类型是字符串,名字可以随便换,但不能是JAVA关键字,比如 java,while,for等等。
new 是构造的意思的,一般类都有默认的构造器,用于实例化类。
最后想说的话:
1, 在JAVA世界,一般类名标准都要求单词首字大写,比如softschool 应该写成 SoftSchool,这是业界内默认的约定。
2, 左大括号不像.net那样。
举个例子给你参考:
public class SoftSchool {
public void test(){
//...your codes
}
}
public class Printer {
public static void main(String[] args) {
SoftSchool softSchool = new SoftSchool();
softSchool.test();
}
}
在java中,接口被看作是一种特殊的类。但是不能用new操作符创建接口的实例
它可以用来解决不是继承于同一个父类的两个类的多态实现。
public interface eatable
{
public void howToEat();
}
public class apple implements eatable
{
public void howToEat()
{
System.out.println("eat directly");
}
}
public class pig implements eatable
{
public void howToEat()
{
system.out.println("cooked to eat");
}
}
然后我们可以直接定义一个
eatable 的变量
例如eatable a = new apple()
a.howToEat();
a = new pig();
a.howToEat();
你就可以看到好处了
------------------------------------------------------------
新浪微博:java_learner
给你不一样的java资料更新