Java 接口的简单入门介绍(仅个人理解)

一、接口的基本概念

接口可以理解为一种特殊的抽象类型,它定义了一组方法的签名,但不包含方法的实现。接口就像是一份 “契约”,规定了实现该接口的类必须提供哪些功能。它类似于生活中的协议,比如手机充电器接口,只要充电器符合这个接口标准,就能给手机充电,而不需要关心充电器内部的构造和工作原理。​

在 Java 中,接口的定义使用interface关键字。如:

        interface Shape {​

                double getArea();​

                double getPerimeter();​

        }​

上述为一简单代码,定义了一个Shape接口,其中包含了getArea和getPerimeter两个抽象方法,用于计算图形的面积和周长。

二、接口的语法规则

​1. 接口的声明

一般形式为:

        [public] interface InterfaceName [extends InterfaceList] {​

                // 常量声明​

                // 抽象方法声明​

        }

public:可选的访问修饰符,表示接口可以被任何类访问。如果不使用public,则接口只能在同一个包内被访问。

InterfaceName:接口的名称,遵循 Java 的命名规范。​

extends InterfaceList:接口可以继承其他接口,实现接口的多继承。InterfaceList是一个或多个父接口的列表,多个接口之间用逗号分隔。

2. 常量声明

接口中可以声明常量,这些常量默认是publicstaticfinal(可省略)的,即全局常量。如:

        interface Dome {​

                int MAX = 100;​

                String NAME = "ABAC";​

        }

在使用时,可以通过接口名直接访问这些常量,如Dome.MAX。

3. 方法声明

一般抽象方法如:

        interface Animal {​

                void speak();​

        }

三、接口的特性

1.实现多继承

Java 类不支持多继承,但接口可以通过继承多个父接口来实现类似多继承的效果,这有助于整合多个不同的功能。如:

        interface Animal {​

                void speak();​

        }​

        interface Earth {​

                void Preson();​

        }​

        interface SuperAnimal extends Animal, Earth {​

                // 继承了Animal, Earth接口的抽象方法,也可以添加额外的方法声明​

        }

2.提高代码的可维护性和扩展性

当需求发生变化时,只需要修改接口的实现类,而不会影响到其他依赖该接口的代码。

3.实现解耦

接口使得类与类之间的依赖关系更加松散,通过接口,不同的类可以相互协作,而不需要了解对方的具体实现细节,提高了代码的可复用性

五、接口与抽象类的区别

虽然接口和抽象类都用于抽象和定义规范,但它们之间存在一些明显的区别:​

1.定义方式接口使用interface关键字定义,抽象类使用abstract class关键字定义。

2.方法实现接口中的方法默认是抽象的不能有方法体抽象类以包含抽象方法,也以包含具体的实现方法。​

3.继承关系:一个类只能继承一个抽象类,但可以实现多个接口。​

4.成员变量接口只能定义常量抽象类定义普通的成员变量

六、接口的上转型

1.上转型的概念

接口的上转型是指将实现了某接口的类的对象,赋值给该接口类型的变量。此时,这个接口类型的变量就可以调用接口中声明的方法,但不能调用实现类特有的方法。这就好比一辆汽车,它实现了 “交通工具” 接口,当我们把汽车对象赋值给 “交通工具” 接口变量时,我们可以通过这个变量使用交通工具共有的功能,如 “行驶”,但无法直接使用汽车特有的功能,比如 “自动驾驶”(假设自动驾驶是汽车特有的)。

代码演示为:

        interface Drawable {​

                void draw();​

        }​

        class Circle implements Drawable {​

                @Override​

                public void draw() {​

                System.out.println("绘制一个圆");​

                }​

        }​

        class Rectangle implements Drawable {​

                @Override​

                public void draw() {​

                System.out.println("绘制一个矩形");​

                }​

        }

主函数上转型实现:

        public class Main {​

                public static void main(String[] args) {​

                        Drawable drawable1 = new Circle(); // 上转型,Circle对象赋值给Drawable接口变量​

                        Drawable drawable2 = new Rectangle(); // 上转型,Rectangle对象赋值给Drawable接口变量​

                        drawable1.draw();​

                        drawable2.draw();​

                }​

        }

在上述代码中,drawable1和drawable2是Drawable接口类型的变量,它们分别引用了Circle和Rectangle的对象。通过这两个变量,我们只能调用Drawable接口中声明的draw方法,无法调用Circle或Rectangle类中可能存在的其他特有方法。

2.上转型的优点

(1)提高代码的灵活性和可扩展性:当程序中需要处理多种实现了同一接口的类对象时,使用接口上转型,只需通过接口变量来操作,无需关注具体的实现类。例如,在一个绘图程序中,无论添加多少种新的图形类(只要实现了Drawable接口),都可以通过Drawable接口变量来统一绘制,而不需要修改调用绘制方法的代码。

(2)实现多态性:接口的上转型是多态性的一种体现,它使得同样的方法调用,根据实际引用的对象类型不同,产生不同的行为,增强了程序的动态性。

结语:以上便是我(新人小白)对Java接口的一些有限的理解,如有错误或不全面的地方请各位大神多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值