当前位置: 首页 > 后端技术 > Java

Java培训基础-抽象类和接口

时间:2023-04-01 18:39:16 Java

以下文章来自程序员老田,作者为程序员老田1.抽象类在面向对象的概念中,所有的对象都是用类来描述的,但是反过来,并不是所有的类都用来描述对象,如果一个类没有包含足够的信息来描述一个特定的对象,那么这样的类就称为抽象类。Java中抽象类的语法格式如下:abstract类类名{abstract返回类型方法名(参数列表);}abstract表示该类或方法是抽象的如果类用abstract修饰,则表示该类或方法是抽象的class是抽象类,抽象类包含构造函数,但不能在外部实例化(抽象类的构造函数不能在其他类中调用)。如果一个方法用abstract修饰,则表示该方法是一个抽象方法,抽象方法只有声明没有实现。需要注意的是,abstract关键字只能用在普通方法中,不能用在静态方法或构造函数中。抽象方法的三个特点是:抽象方法没有方法体,抽象方法必须存在于抽象类(或接口)中,子类重写父类时必须重写父类的所有抽象方法。父类,除非子类也是抽象类注意:使用abstract关键字修饰抽象方法时,不能使用private修饰,因为抽象方法必须由子类重写,如果使用private声明,子类不能被重写。抽象类的定义和使用规则如下:抽象类和抽象方法都必须用abstract关键字声明。如果一个方法被声明为抽象的,则该类也必须被声明为抽象的。在一个抽象类中,可以有0~n个抽象方法和0~n个具体方法。抽象类不能被实例化,即不能使用new关键字创建对象。2.接口抽象类是从多个类中抽象出来的模板。如果这种抽象进行得更彻底一些,就可以提取出一个更特殊的“抽象类”——接口(Interface)。接口是Java中最重要的概念之一。可以理解为一个特殊的类。不同的是,接口的成员没有执行体,由全局常量和公共抽象方法组成。Java接口的定义方法与类基本相同,只是接口定义中使用的关键字是interface,接口定义的语法格式如下:[public]interfaceinterface_name[extendsinterface1_name[,interface2_name,…]]{//接口体,可以包括定义常量和声明方法[public][static][final]typeconstant_name=value;//定义常量[public][abstract]returnTypemethod_name(parameter_list);//declaringmethods}以上语法说明如下:public表示接口的修饰符。当没有修饰符时,使用默认修饰符。此时接口的访问权限仅限于所属的包;interface_name表示接口的名称。接口名称应该遵循与类名称相同的命名规则,即如果仅从语法的角度来看,接口名称只需要是一个合法的标识符即可。如果要符合Java可读性规范,接口名应该由多个有意义的词组成,每个词的首字母大写,词与词之间不需要任何分隔符。extends表示接口的继承关系;interface1_name表示要继承的接口名称;constant_name表示变量名,通常是static和final;returnType表示方法的返回值类型;parameter_list表示参数列表,接口中的方法是没有方法体的。注意:一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类。接口对其声明、变量和方法有很多限制。这些限制归纳为接口的特点:具有公共访问控制符号的接口允许任何类使用;未指定public的接口,它们的访问将仅限于它们所属的包。方法的声明不需要其他修饰符。在接口中声明的方法将被隐式声明为公共(public)和抽象(abstract)。Java接口中声明的变量实际上是常量。接口中的变量声明会被隐式声明为public、static和final,即常量,所以接口中定义的变量必须进行初始化。接口没有构造函数,不能实例化。3.实现接口接口的主要目的是要由实现类来实现。一个类可以实现一个或多个接口。extends关键字用于继承,implements关键字用于实现。因为一个类可以实现多个接口,这也是Java对单一继承缺乏灵活性的补充。实现接口的类的语法格式如下:class[extendssuperclass_name][implementsinterface1_name[,interface2_name...]]{//body}以上语法说明如下:public:类修饰符;superclass_name:required继承父类的名称;interface1_name:要实现的接口名称。实现接口需要注意以下几点:实现接口类似于继承父类,也可以获得被实现的接口中定义的常量和方法。如果一个类需要实现多个接口,用逗号分隔。一个类可以继承一个父类,同时实现多个接口。implements部分必须放在extends部分之后。一个类实现一个或多个接口后,该类必须完整实现这些接口中定义的所有抽象方法(即重写这些抽象方法);否则,该类将保留从父接口继承的抽象方法,该类也必须定义为抽象类_java训练类。4.接口和抽象类的异同接口和抽象类的相同点:都可以继承,不能实例化可以包含方法声明(抽象方法)可以在程序中作为抽象层出现接口和抽象类的区别:抽象类可以有构造函数,但接口不能有构造函数。抽象类中的成员变量可以是多种类型,而接口中的成员变量只能是publicstaticfinal类型(常量)。接口不能包含静态代码块和静态方法(用static修饰的方法),而抽象类可以有静态代码块和静态方法。一个类可以实现多个接口,但只能继承一个抽象类。接口可以实现多次,抽象类只能被单个继承。如果抽象类实现了接口,则可以将接口中的方法作为抽象方法映射到抽象类,无需实现,接口中的方法可以在抽象类的子类中实现。注意:在JDK1.8之后,接口可以有静态方法和方法体。注意:JDK1.8之后,接口允许包含具体的实现方法,这些方法称为“默认方法”,默认方法用default关键字修饰。注意:JDK1.9之后,允许将方法定义为private,这样一些重用的代码就不会暴露方法了。