📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

接口回调

创建时间2021-12-18最后修改2021-12-19原位置/程序员成长之旅/Java学习/笔记/字数908
目录:程序员成长之旅/Java学习/笔记

接口回调


指针回调: 表示一个变量的地址在某一时刻存放在一个 '指针变量' 中,这个 '指针变量' 可以间接操作该变量中存放的数据;

接口回调: 接口回调借用了C语言中'指针回调'的术语, 有 '接口变量'.

1. 接口变量的类型声明的类型必须是接口, 声明后就可以接受实现了该接口的对象的引用

2. 使用该接口变量可以调用所有接口中所描述的方法

3. (其实当 接口变量 在调用被类实现的接口方法时,就是在通知相应的对象调用这个方法)

Example5_8

关键

calArea方法中使用了接口回调, 该接口变量调用了接口IArea中描述的的方法.


// Student.calArea(IArea area);

public void calArea(IArea area){

System.out.println("Area of " + area.getArea() + " is " + area.getType());

}

// IArea.java

public interface IArea{

public float PI = 3.1415926f;

public String getType();

public float getArea();

}

在入口文件中使用了Student.calArea(IArea area), 描述了如何给接口变量传实参


// Example5_8.java 入口文件

public class Example5_8{

public static void main(String[] args) {

Desk desk = new Desk(10, 20);

Cake cake = new Cake(12, 8);

BasketBall basketBall = new BasketBall(10);

Student mikeStudent = new Student("Mike");

mikeStudent.calArea(desk);

mikeStudent.calArea(cake);

mikeStudent.calArea(basketBall);

System.out.println("万宇晨 20203101019");

}

}

完整代码


// Example5_8.java

package JClassHomework_21_12_18_2;

public class Example5_8{

public static void main(String[] args) {

Desk desk = new Desk(10, 20);

Cake cake = new Cake(12, 8);

BasketBall basketBall = new BasketBall(10);

Student mikeStudent = new Student("Mike");

mikeStudent.calArea(desk);

mikeStudent.calArea(cake);

mikeStudent.calArea(basketBall);

System.out.println("万宇晨 20203101019");

}

}

// IArea.java

package JClassHomework_21_12_18_2;

public interface IArea{

public float PI = 3.1415926f;

public String getType();

public float getArea();

}

// Desk.java

package JClassHomework_21_12_18_2;

public class Desk implements IArea{

private float lenght;

private float width;

private String type = "Desk";

public Desk(){}

public Desk(float lenght, float width){

this.lenght = lenght;

this.width = width;

}

public float getWidth() {

return width;

}

public void setWidth(float width) {

this.width = width;

}

public float getLenght() {

return lenght;

}

public void setLenght(float lenght) {

this.lenght = lenght;

}

@Override

public String getType() {

return type;

}

@Override

public float getArea() {

return this.lenght * this.width;

}

}

// Cake.java

package JClassHomework_21_12_18_2;

public class Cake implements IArea{

private float width;

private float height;

private String type = "Cake";

public Cake(){}

public Cake(float width, float height){

this.width = width;

this.height = height;

}

public float getWidth() {

return width;

}

public void setWidth(float width) {

this.width = width;

}

public float getHeight() {

return height;

}

public void setHeight(float height) {

this.height = height;

}

@Override

public String getType() {

return type;

}

@Override

public float getArea() {

return this.width * this.height / 2;

}

}

// BasketBall.java

package JClassHomework_21_12_18_2;

public class BasketBall implements IArea{

private float radius;

private String type = "BasktBall";

public BasketBall(){}

public BasketBall(float radius){

this.radius = radius;

}

public float getRadius() {

return radius;

}

public void setRadius(float radius) {

this.radius = radius;

}

@Override

public String getType() {

return type;

}

@Override

public float getArea() {

return this.radius * this.radius * IArea.PI;// 调用了接口中的值

}

}

// Student.java

package JClassHomework_21_12_18_2;

public class Student{

private String name;

public Student(){}

public Student(String name){

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

/**

*

* @param area 接口变量, 可以调用所有实现了IArea接口的类的对象中IArea所描述的方法.(接口回调)

*/

public void calArea(IArea area){

// 指针回调: 表示一个变量的地址在某一时刻存放在一个 '指针变量' 中,这个 '指针变量' 可以间接操作该变量中存放的数据;

// 接口回调: 接口回调借用了C语言中'指针回调'的术语., 有 '接口变量'.

//           1. 接口变量的类型声明必须是接口, 声明后就可以接受实现了该接口的对象的引用

//           2. 使用该接口变量可以调用所有接口中所描述的方法

//           3. (其实当 接口变量 在调用被类实现的接口方法时,就是在通知相应的对象调用这个方法)

System.out.println("Area of " + area.getArea() + " is " + area.getType());

}

}
其他使用方法

public class Caller {

//保存一个接口引用

private MyCallInterface callInterface;

public Caller() {

}

public void setCallFunc(MyCallInterface callInterface) {

this.callInterface = callInterface;

}

public void call() {

callInterface.printName();

}

}