活动地址:优快云21天学习挑战赛
定义
接口是一种特殊的抽象类,为Java提供新的功能
格式
//允许接口继承一个或多个接口,默认修饰符为public
[public] interface 接口名称 [extends 父接口列表]{//父接口列表可以不止一个
//默认数据成员只能是静态常量
[public] [static] [final] 数据类型 成员变量=常量;
//默认接口内只允许有抽象方法
[public] [abstract] 返回值数据类型 方法名(参数)//英文括号
}
如:
interface A{
int a=1;//默认定义
void shout();//默认方法定义
}
interface B extends A{
//继承后默认拥有shout()抽象方法
void shout1();
}
接口的实现和引用
1.接口的实现
使用关键字implements通过接口的特征创建新的类,用新的类实例化对象
接口不能直接实例化对象
2.接口的引用
接口作为一种引用类型被使用。
任何实现该接口的类实例化的对象都能存储在该接口类型的变量中。
通过该变量实现接口内的方法
实现格式
//实现接口的类是普通类,不是抽象类时,抽象方法需重写,是抽象类时则不需要重写
class 类名称 implements 接口列表
{
}
如:
public class Main implements B{ //接口的实现
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//定义B接口的变量指向Main类的对象,用父类对象访问子类的成员
B b=new Main();
b.shout();//访问成员方法
b.shout1();//访问成员方法
}
//子类覆盖父类方法时不可以缩小父类方法的访问权限范围
//即默认使用父类的访问权限范围
@Override
public void shout() {//此处不加public 报错,即重写时需要显式使用修饰符
System.out.println("A");;//表明继承成功
System.out.println(+B.a);//表明继承成功
}
@Override
public void shout1() {//此处不加public 报错
System.out.println("B");
}
}
###接口的继承
1.接口的多继承继承
一个子接口可以同时继承多个直接父接口,父接口之间采用英文逗号:“,”间隔
子接口继承父接口的所有变量和方法
2.接口实现的类的多重继承
一个类可以同时实现多个接口
注意:
子接口和父接口出现同名常量,父接口的常量被隐藏
出现同名方法,子接口的方法覆盖父接口的方法
interface A{
int a=1;//默认定义
void shout();//默认方法定义
}
interface C{
String c ="常量";
void shout2();
}
interface D{
String d ="常量";
void shout3();
}//接口的多重继承
interface B extends A,C{
//继承后默认拥有shout()抽象方法
void shout1();
}
//接口实现类的多重继承
public class Main implements B,D{ //接口的实现
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//定义B接口的变量指向Main类的对象,用父类对象访问子类的成员
B b=new Main();
b.shout();//访问成员方法
b.shout1();//访问成员方法
b.shout2();
Main m=new Main();
m.shout3();
}
//子类覆盖父类方法时不可以缩小父类方法的访问权限范围
//即默认使用父类的访问权限范围
@Override
public void shout() {//此处不加public 报错,即重写时需要显式使用修饰符
System.out.println("A");;//表明继承成功
System.out.println(+B.a);//表明继承成功
}
@Override
public void shout1() {//此处不加public 报错
System.out.println("B");
}
@Override
public void shout2() {//此处不加public 报错
System.out.println("C");
}
@Override
public void shout3() {//此处不加public 报错
System.out.println("D");
}
}