接口
接口可以理解为一种特殊的类,由全局成量和公共的抽象方法所组成。
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
接口定义
和类定义不同,定义接口不在使用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]);
复制代码