Java中的接口及实现类

一、前言

上文中提到Java的数据结构,本文来说一下Java中的数据类型中的引用类型中的接口

在Java中,数据类型分为两种:基本类型(Primitive Types)和引用类型(Reference Types)

1.基本类型分类

        1.1整型:byte(8位)、short(16位)、int(32位)、long(64位)

        1.2浮点型:float(32位)、double(64位)

        1.3字符型:char(16位)

        1.4布尔型:boolean

        基本类型直接存储值,它们在内存中占有固定大小的空间,因此可以直接操作。

2.引用类型分类

        2.1类(Class)

        2.2接口(Interface)

        2.3数组(Array)

引用类型的变量并不直接存储值,而是存储了一个对内存中实际对象的引用。通过这个引用,我们可以访问和操作实际的对象。引用类型的默认值是null,表示不指向任何对象。

3.void无类型

        除了基本类型和引用类型之外,Java还有一种特殊的类型:void,表示无类型,通常用在不返回任何值的方法中。

二、接口(interface)

1.定义

        在Java等面向对象的编程语言中,接口(Interface)是一种引用类型,它是方法和常量的集合。接口是完全抽象的,它不包含实现(方法体),只包含方法的声明和常量。

        它提供了一种机制,可以用来定义一组合同或约定,供类去实现。

        接口通常被用来描述一个对象可以做什么,而不是它是什么,准确的来说描述的对象的行为

2.接口中内容

        2.1默认的公开(public)、静态(static)、最终(final)的常量

        2.2默认的公开(public)、抽象(abstract)的方法

        2.3jdk8的默认方法

                2.3.1解决接口的修改与现有的实现不兼容的问题。在Java 8之前,如果一个接口需要添加新的方法,就会破坏实现该接口的所有类,因为这些类都需要实现接口中的所有方法。但是有了默认方法,新添加的方法可以有一个默认的实现,这样所有的旧类都可以不用改变,还可以继续使用这个接口。

                2.3.2通过默认方法,Java 8 允许我们在接口中写具体的方法实现,这样我们就能创建可复用的方法,可以在我们自己的代码中,或者在多个接口之间进行复用。但是虽然默认方法让接口拥有了类似类的功能,但是接口仍然不能有状态(即,不能有字段),所有的方法仍然是公开的,并且不能是静态的(除了静态方法)。

        2.4静态方法    

                2.4.1接口的静态方法属于接口,不需要实现接口的类的实例,直接用接口名就可调用   

                2.4.2接口包含静态方法。实现类不能重写接口的静态方法

                2.4.3用于为接口提供一些辅助或者工具方法,这些方法与接口的实例无关

3.接口作用

        3.1定义规范:接口定义了一组方法的规范,表示某个类应该具备的功能。通过接口,可以约定类应该实现哪些方法以及这些方法的参数和返回类型。接口定义了类之间的契约,确保了代码的一致性和可维护性。

        3.2实现多态:接口使得多态性成为可能。如果一个类实现了某个接口,它可以被当做该接口类型的对象使用。这意味着可以通过接口类型引用指向实现类的对象,从而提高代码的灵活性和可扩展性。

        3.3分离接口和实现:接口将方法的定义与实现分离开来。接口中只定义方法的签名而不包含方法体,具体的实现由实现接口的类去完成。这种分离可以使得代码更清晰、可读性更好,并且方便进行模块化开发。

        3.4实现多继承:Java中的类只支持单继承,但是一个类可以实现多个接口。这使得接口成为一种在类之间共享功能的方式,通过实现多个接口,可以获得不同接口定义的多个功能。

        3.5定义常量:接口可以定义常量,这些常量在实现类中可以直接使用。接口中的常量默认为 public static final,可以通过接口名直接访问。

        总的来说,接口在Java中的作用是定义一组规范,实现多态性,分离接口和实现,实现多继承以及定义常量。它是一种重要的编程工具,用于提高代码的可复用性、可扩展性和可维护性。

4.接口特征

        4.1接口不能直接创建实例, 但是一个父类(或接口)类型的引用可以指向一个子类(或实现类)的对象

        例如:一个接口        public interface Shape { void draw(); }

                   一个实现类

                   public class Circle implements Shape {

                        public void draw() {

                                System.out.println("Draw a circle");

                        }

                    }

                接口类型的变量shape可以指向任何实现了Shape接口的类的实例,这是Java中多态性的一种表现

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

                         Shape shape = new Circle();

                         shape.draw();

                         }

                   }

                 

三、实现类

1.定义

        在Java中,实现类(Implementation Class)是指实现了某个接口(Interface)的类。接口定义了一组需要被实现的方法,而实现类就是提供这些方法具体实现的类。

2.内容

        2.1实现类可以定义自己的属性(fields)。这些属性可以是任何类型,包括基本类型(如int, double等)和引用类型(如String, List等)。这些属性可以被类的方法使用,也可以被类的实例(对象)使用。

        2.2实现类可以定义自己的方法(methods)。这些方法可以是公有的(public),也可以是私有的(private),或者是受保护的(protected)。这些方法可以被类的实例(对象)调用,也可以被类自己的其他方法调用。

        2.3实现类可以有自己的构造方法(constructors)。构造方法是一种特殊的方法,用于创建和初始化类的新对象。构造方法的名称必须与类名相同,且没有返回类型。

        2.4实现类可以有静态属性(static fields)和静态方法(static methods)。静态属性和静态方法属于类,而不属于类的任何对象。也就是说,不需要创建类的对象就可以访问它的静态属性和静态方法。

        2.5实现类可以有内部类(inner classes)。内部类是定义在另一个类里面的类。内部类可以访问其外部类的所有成员,包括私有的成员。

        2.6实现类还可以实现其他的接口,或者继承其他的类。

                2.6.1一个类实现多个接口:public class MyClass implements Interface1, Interface2

                2.6.2一个类继承一个类并且实现多个接口:

                        public class MyClass extends SuperClass implements Interface1, Interface2

                2.6.3一个类只能继承一个类但是可以实现多个接口(单继承

3.作用

        3.1实现接口:在Java中,类可以实现一个或多个接口,这意味着这个类必须提供接口中所有声明的方法的具体实现。这是一种确保类遵循特定行为的方式。

        3.2多态:通过实现接口,我们可以实现多态,这是一种允许我们引用一个接口类型的对象,而实际上这个对象是实现了这个接口的一个类的实例。

        3.3模块化:接口和实现类的概念使我们可以更好地模块化我们的代码。我们可以定义接口,并允许其他开发者提供自己的实现类,这样可以使我们的代码更加灵活和可插拔。

四、接口和实现类的关系

               实现类   实现  接口1,接口2

五、特殊情况下实现类不用实现接口所有方法

        1.实现类被声明为抽象类可以不实现接口中的所有方法。

         2.接口中的静态方法和默认方法可以不被实现类实现

熟悉基本概念

1.引用:对象在内存中的地址

Dog myDog = new Dog();

代码含义:创建一个新的Dog对象,并将这个新创建的Dog对象的引用赋值给变量myDog。

  1. Dog:这是一个类名,表示我们要创建的对象的类型是Dog。

  2. myDog:这是我们定义的变量名,它将用来存储Dog对象的引用。

  3. =:这是赋值操作符,它将右侧创建的新对象的引用赋值给左侧的变量。

  4. new:这是一个关键字,用于创建新的对象。

  5. Dog():这是Dog类的构造方法,用于创建一个新的Dog对象。

     6.创建一个对象时,例如new Dog(),这个操作会在内存中创建一个新的Dog对象,并返回这个对象在内存中的地址,我们把这个地址称为引用。

总结:在内存中创建对象---不返回对象而是返回对象在内存中的地址(这个地址就叫引用)---我们可以在变量名中存储对象的引用(也就是对象在在内存中的地址)

2.interface是一种规范

        2.1在Java中,接口(Interface)被视为一种规范或者协议,它定义了一组方法,这些方法应该由实现(implements)该接口的类来提供具体实现。

        2.2当我们说接口是一种规范,意思是它规定了一种标准,要求实现该接口的类必须遵守。这种标准主要体现在两个方面:

                2.1.1方法声明:接口中声明的所有方法,实现该接口的类都必须提供这些方法的具体实现。这些方法的名称、参数列表和返回类型都必须与接口中声明的完全相同。

                2.2.2行为规范:虽然接口本身并不提供方法的具体实现,但是通过接口中方法的命名和注释,我们可以明确知道这些方法的预期行为。实现接口的类在提供方法实现时,需要确保方法的行为符合接口的规定。

例如,如果有一个接口叫做“飞行器”,它声明了一个方法叫做“飞行”,那么所有实现“飞行器”接口的类都应该有一个“飞行”的方法,并且这个方法应该描述该对象如何飞行。

这种规范性使得我们可以编写出更加通用、可复用的代码,因为我们可以针对接口编程,而不是针对具体的实现类编程。这样,只要一个类实现了某个接口,我们就可以安全地使用该接口中定义的所有方法,而不用关心具体的实现细节。

3.interface是一种引用类型(变量引用对象)

接口是一种引用类型,因为它定义了一种引用行为的规范,而不是具体的数据值。接口本身并不能实例化,也就是说,不能创建一个接口的对象。但是,你可以声明一个接口类型的变量,然后让这个变量引用一个实现了该接口的类的对象。

例如,如果你有一个接口叫做Animal,和一个实现了Animal接口的类叫做Dog,可以这样声明和使用它们:

Animal myAnimal = new Dog();

在这个例子中,myAnimal是一个接口类型的变量,它引用了一个Dog对象。这个Dog对象实现了Animal接口,所以它可以被赋值给一个Animal类型的变量。

所以,接口是一种引用类型,因为它定义了一种行为规范,而不是具体的数据值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值