目录
(1)接口的基本介绍编辑
(2)接口的注意事项和细节
1.接口不能被实例化
2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰
3.一个普通类实现接口,必须将接口所有的抽象方法都实现。
4.抽象类实现接口,可以不用实现接口的方法
5.一个类同时可以实现多个接口
6.接口中的属性,只能是final,而且是public static final修饰符
7.一个接口不能继承其他的类,但是可以继承多个别的接口。
(3)接口和继承的区别
(4)接口的多态性
(1)接口的基本介绍
在接口类中可以有三种方法,分别为抽象、默认、静态,举例如下:
interface example{
abstract int a();//抽象方法,如果没有写abstract,则其也会默认为abstract。
default void b(){//默认方法
};
public static void c(){//静态方法
}
}
而在实现类中,除了必须要实现的抽象类,还可以有自己的属性和方法。举例如下:
interface example{
abstract int a();//抽象方法,如果没有写abstract,则其也会默认为abstract。
default void b(){//默认方法
};
public static void c(){//静态方法
}
}
class iA implements example{
int number=10;//自己的成员属性
public void b(){//自己的成员方法
System.out.println("这是在函数b");
}
public int a() {//实现抽象方法
return 0;
}
}
(2)接口的注意事项和细节
1.接口不能被实例化
interface example{
}
public class Main {
public static void main(String[] args) {
example example = new example();//接口不能被实例化
}
}
2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰
interface example{
void a();//默认为abstract
}
3.一个普通类实现接口,必须将接口所有的抽象方法都实现。
4.抽象类实现接口,可以不用实现接口的方法
interface example{
void a();//默认为abstract
}
abstract class iB implements example{//如果是一个抽象类实现接口,则可以不去实现接口的方法
}
5.一个类同时可以实现多个接口
interface example{
}
interface example2{
}
abstract class iB implements example,example2{//一个类同时可以实现多个接口
}
6.接口中的属性,只能是final,而且是public static final修饰符
interface example{
int a=10;//默认为public static final int a=10
}
public class Main {
public static void main(String[] args) {
System.out.println(example.a);
}
}
7.一个接口不能继承其他的类,但是可以继承多个别的接口。
interface a{
}
class b{
}
interface c extends a{//这是正确的,接口可以继承其他的接口
}
interface d extends b{//这是错误的,接口不能继承其他的普通类
}
(3)接口和继承的区别
很多人这时候觉得接口没有比继承比nb多少嘛,不就多个抽象方法嘛。假如有三个人,他们分别会编程、弹钢琴、健身,有一个儿子想拜干爹想学习他们的技能。如果用继承关系,是is-a的关系,这个人只能继承一个类,也就是学习一种技能。如果用继承同时实现三种则会报错,如下图。
用接口则可以实现一个类去实现多个接口的方法,他们的关系是like-a。
(4)接口的多态性
用生活中的一个实际例子,假如我们有手机、相机、电脑,我们想把手机和相机接入到电脑上,要怎么样接入呢?在现实我们知道用电脑上有usb接口直接插上就行。在编程中,我们首先则要一个接口定义usb规格,然后在手机和相机类去实现这个接口,最后在电脑中定义一个可以调用接口的方法。
interface usbinterface{//一个接口
void use();
}
class phone implements usbinterface{//手机实现接口
@Override
public void use() {
System.out.println("手机接入");
}
}
class camera implements usbinterface{//电脑实现接口
@Override
public void use() {
System.out.println("相机接入");
}
}
class comperter{
public void work(usbinterface usbinterface1){//定义可以调用接口的方法
usbinterface1.use();
}
}
public class Main {
public static void main(String[] args) {
comperter comperter = new comperter();
phone phone = new phone();
camera camera = new camera();
comperter.work(phone);//体现了多态性
System.out.println("====================");
comperter.work(camera);//体现了多态性
}
}
接口多态数组的体现
interface usbinterface{//一个接口
void use();
}
class phone implements usbinterface{//手机实现接口
@Override
public void use() {
System.out.println("手机接入");
}
public void call(){//手机的功能
System.out.println("可以打电话");
}
}
class camera implements usbinterface{//电脑实现接口
@Override
public void use() {
System.out.println("相机接入");
}
public void picture(){//相机的功能
System.out.println("可以照相");
}
}
class comperter{
public void work(usbinterface usbinterface1){//定义可以调用接口的方法
usbinterface1.use();
}
}
public class Main {
public static void main(String[] args) {
comperter comperter = new comperter();
usbinterface []usbinterfaces = new usbinterface[2];
usbinterfaces[0]=new phone();//体现了多态性
usbinterfaces[1]=new camera();//体现了多态性
if(usbinterfaces[0] instanceof phone){//如果运行类型为phone类则向下转型调用手机的方法
((phone) usbinterfaces[0]).call();
}
if(usbinterfaces[1] instanceof camera){
((camera)usbinterfaces[1]).picture();//如果运行类型为camera类则向下转型调用手机的方法
}
}
}