Java接口与数组

本文详细介绍了Java中的接口,包括接口的定义、使用、与类的区别,以及接口的多继承特性。同时,通过实例展示了接口在实际编程中的应用。此外,还讲解了Java数组的声明、分配空间、赋值和处理数组数据的操作。最后,提供了数组应用的练习题,如用数组打印字符和计算数组的和与平均值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口

接口可以理解为一种特殊的类,由全局成量和公共的抽象方法所组成。

类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

接口定义

和类定义不同,定义接口不在使用class关键字,而是使用interface关键字。

接口定义的基本语法

[修饰符] interface 接口名

{ 零个到多个常量定义。。。

零个到多个抽象方法的定义。。。。

}

接口中的方法只能是抽象方法,总是使用,即使定义时不添加 public abstract 修饰符。系统也会自动加上。

接口使用

一个类可以实现一个或多个接口,实现接口使用implements

关键字。java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。

继承父类实现接口语法

[修饰符] class 类名 extends 父类 implements 接口1 ,接口2

{ 类体部分//如果继承了抽象类,需要实现继承的 抽象方法;要实现接口的抽象方法。 }

如果要继承父类,继承父类必须在实现接口之前

接口的使用

接口在使用过程中,还经常与匿名内部类配合使用 匿名内部类就是没有名字的内部类 多用于关注实现而不关注实现类的名字

接口与类的区别

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承

练习题

练习题一: 中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按

照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。

要求如下:

(1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中

有个“坚持党的领导”方法:void partyLeader()

(2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有个“安

全生产”的抽象方法:abstract void safetyInProduction()

(3)该应用程序中有一个“省政府”类:Province,该类继承StateCouncil抽象

类并且实现CentralPartyCommittee接口;在实现partyLeader()方法时输出“我们

各省人民一定坚持党的领导!”;在重写safetyInProduction()方法时输出“我们各

省人民一定按照国务院的指示进行安全生产!”。

(4)该应用程序中有一个主类E,在主类E的main方法中创建Province类的对

象,来测试Province类的功能。

程序代码:

public interface CentralPartyCommittee {

void partyLeader( );
复制代码

}

public abstract class StateCouncil {

abstract void safetyInProduction();
复制代码

}

public class Province extends StateCouncil implements CentralPartyCommittee{

public void partyLeader() {
    System.out.println("我们各省人民一定坚持党的领导!");
}

@Override
public void safetyInProduction() {
    System.out.println("我们各省人民一定按照国务院的指示进行安全生产!");
}
复制代码

}

public class E { public static void main(String[] args) {

CentralPartyCommittee centralPartyCommittee=new Province();
centralPartyCommittee.partyLeader();
}
复制代码

}

练习题: 按如下要求编写Java程序:

(1)编写接口InterfaceA,接口中含有方法void printCapitalLetter()。

(2)编写接口InterfaceB,接口中含有方法void printLowercaseLetter()。

(3)编写非抽象类Print,该类实现了接口InterfaceA和InterfaceB。要求printCapitalLetter()方法实现输出大写英文字母表的功能,printLowercaseLetter()方法实现输出小写英文字母表的功能。

(4)再写一个主类Test,在main方法中创建Print的对象并赋值给InterfaceA的变量a,由变量a调用printCapitalLetter方法,然后再创建Print的对象并将该对象赋值给InterfaceB的变量b,由变量b调用printLowercaseLetter方法。

public interface InterfaceA {

void printCapitalLetter();
复制代码

}

public interface InterfaceB {

void printLowercaseLetter();
复制代码

}

public class Print implements InterfaceA,InterfaceB {

@Override
public void printCapitalLetter() {
    System.out.println("ZXCVBNMASDFGHJKLQWERTYUIOP");

}

@Override
public void printLowercaseLetter() {
    System.out.println("zxcvbnmasdfghjklqwertyuiop");

}
复制代码

}

public class Test {

public static void main(String[] args) {

  InterfaceA a=new Print();
  a.printCapitalLetter();
  InterfaceB b=new Print();
  b.printLowercaseLetter();

}
复制代码

}

数组

1.声明数据 语法:数据类型[] 数组名:

或者:数据类型 数组名[]

:int[] scores;

2.分配空间 简单的说,就是指定数组中最多可存储多少个元素

语法

数组名 = new 数据类型[数组的长度] scores = new int[5];

3.赋值

分配空间后就可以向数组放数据了,数组中元素都是通过下标来访问的。例如scores数组中存放学生成绩

scores[0] = 89;

scores[1] = 79;

4.处理数组中数据

我们可以对赋值后的数据进行操作和处理,如获取并输出数组中元素的值 System.out.print(scores[0]);

习题练习

用数组打印abc

public class abc { public static void main(String[] args) {

    String[] sun;
    sun = new String[3];
    sun[0]="A";
    sun[1]="B";
    sun[2]="C";
    System.out.println(sun[0]);
    System.out.println(sun[1]);
    System.out.println(sun[2]);
复制代码

} }

运算数组的和与平均值

public static void main(String[] args) {
    int[] sun;
    sun = new int[3];
    sun[0] = 10;
    sun[1] = 20;
    sun[2] = 30;

    int shun = 0;

    for (int i = 0; i < sun.length; i++) {
        shun = sun[i] + shun;
    }
    System.out.println(shun);
    System.out.println(shun/sun.length);
复制代码

解析:

package tuxing;这句是打包语句,

public class lingxing 这是声明一个公有的类

public static void main(String[] args)这是主函数,Java程序运行的入口

int a[]={2,4,5,7,5},i,s;这里声明了一个int型数组a并为其制定元素值,还声明了两个int型变量i,s;

s=0;为s付初始值0;

for(i=0;i<5;i++)for循环语句i=0是为上面声明的int型变量i付初始值,i<5是判断i是否小于5,i++是每次运行后i自动加1

s += a[i]; 是求int数组a的五个元素的和,(因为for循环内只有一条语句所以可以吧for(){}后面的{}省略)

System.out.print(s);这是在控制台打印出s的值

如果是失球平均值紧要换成System.out.print(s/5); 解析完。

例子:

    // 反序输出{我爱你}

    char[] love;
    love = new char[3];
    love[0] = '我';
    love[1] = '爱';
    love[2] = '你';
    for (int i = love.length - 1; i >= 0; i--) {
        System.out.print(love[i]);
复制代码

转载于:https://juejin.im/post/5af95e16f265da0b8070dc1c

### Java 接口接受数组作为参数 在 Java 中,接口可以定义方法来接收数组类型的参数。这允许调用者传递整个数组给该方法处理。以下是实现这一功能的方式: #### 方法声明 可以在接口的方法签名中指定参数类型为数组。例如,如果希望方法能够接收字符串数组,则可以将其定义如下[^1]: ```java public interface ArrayProcessor { void processArray(String[] array); } ``` 此方法 `processArray` 将会接收一个 `String[]` 类型的数组。 #### 实现类中的具体实现 当某个类实现了上述接口时,它需要提供具体的逻辑来处理传入的数组。下面是一个简单的例子,展示如何遍历接收到的数组并打印其内容: ```java public class ConcreteArrayProcessor implements ArrayProcessor { @Override public void processArray(String[] array) { System.out.println("Processing the following elements:"); for (String element : array) { System.out.println(element); } } } ``` #### 使用场景示例 假设我们有一个需求,在程序运行期间动态获取一组数据并将这些数据交给接口实例去处理。这里给出一段测试代码演示这种交互过程[^2]: ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args){ // 创建一个列表用于存储临时的数据项 List<String> tempDataList = new ArrayList<>(); // 添加一些模拟数据到列表里 tempDataList.add("Item One"); tempDataList.add("Item Two"); // 转换成数组形式准备传递给接口方法 String[] dataArray = tempDataList.toArray(new String[0]); // 初始化处理器对象 ArrayProcessor processorInstance = new ConcreteArrayProcessor(); // 执行实际操作 processorInstance.processArray(dataArray); } } ``` 以上展示了从集合转换成数组再提交至接口的过程。通过这种方式,我们可以灵活地利用不同容器结构的优势同时满足特定函数对接收参数的要求。 #### 注意事项 需要注意的是,尽管可以直接将基本类型或引用类型封装进数组并通过它们作为参数传递出去,但在设计API的时候应该考虑到性能开销以及内存管理等问题。对于大尺寸的数据集来说,可能更倾向于采用流(streams)或者其他迭代机制而非一次性加载全部项目进入内存之中形成庞大的数组实体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值