发表日期: 2021-03-26 11:24:28 浏览次数:134
醴陵微信公众号开发【醴陵网络推广】醴陵建站、醴陵网站维护、醴陵网页制作、醴陵微信小程序代运营公司
醴陵市,为湖南省辖县级市,由株洲市代管,地处湖南省东部,总面积2156.46平方千米,醴陵市东邻江西省萍乡市湘东区、上栗县,北接浏阳市,西倚株洲市芦淞区、渌口区,南界攸县。截至2018年末,醴陵市辖19镇、4街道办事处、1个经济开发区、1个示范区,户籍人口105.3万。
醴陵市拥有渌江书院、宋名臣祠、醴泉古井、状元芳洲、文笔奇峰、云岩寺等名胜古迹。醴陵市境内浙赣复线横贯东西,醴(陵)茶(陵)线连通南北,距株洲站仅40千米,沪昆高铁、沪昆高速、106国道、320国道纵横交错,市区距长沙黄花国际机场90千米。 [1]
2019年,醴陵市实现地区生产总值716.4亿元,实现财政总收入72.92亿元。 [2] 2020年度真抓实干成效明显,2021年1月29日被湖南省人民政府公布为推动高质量发展成效明显的县市区,给予100万元标准奖励。
在Java 8之前,尽管Java语言中接口已经非常优秀了,但相比其他面向对象的语言而言Java接口存在如下不足之处:
不能可选实现方法,接口的方法全部是抽象的,实现接口时必须全部实现接口中方法,哪怕是有些方法并不需要,也必须实现。
没有静态方法。
针对这些问题,Java 8在接口中提供了声明默认方法和静态方法的能力。接口示例代码如下:
//InterfaceA.java文件package com.a51work6;public interface InterfaceA {
void methodA();
String methodB();
// 默认方法
default int methodC() {
return 0;
}
// 默认方法
default String methodD() {
return "这是默认方法...";
}
// 静态方法
static double methodE() {
return 0.0;
}}复制代码在接口InterfaceA中声明了两个抽象方法methodA和methodB,两个默认方法methodC和methodD,还有声明了静态方法methodE。接口中的默认方法类似于类中具体方法,给出了具体实现,只是方法修饰符是default。接口中静态方法类似于类中静态方法。
实现接口示例代码如下:
//ABC.java文件package com.a51work6.imp;import com.a51work6.InterfaceA;public class ABC implements InterfaceA {
@Override
public void methodA() {
}
@Override
public String methodB() {
return "实现methodB方法...";
}
@Override
public int methodC() {
return 500;
}}复制代码实现接口时接口中原有的抽象方法在实现类中必须实现。默认方法可以根据需要有选择实现(覆盖)。静态方法不需要实现,实现类中不能拥有接口中的静态方法。
上述代码中ABC类实现了InterfaceA接口,InterfaceA接口中的两个默认方法ABC只是实现(覆盖)了methodB。
调用代码如下:
//HelloWorld.java文件package com.a51work6.imp;import com.a51work6.InterfaceA;public class HelloWorld {
public static void main(String[] args) {
//声明接口类型,对象是实现类,发生多态
InterfaceA abc = new ABC();
// 访问实现类methodB方法
System.out.println(abc.methodB());
// 访问默认方法methodC
System.out.println(abc.methodC()); ①
// 访问默认方法methodD
System.out.println(abc.methodD()); ②
// 访问InterfaceA静态方法methodE
System.out.println(InterfaceA.methodE()); ③
}}复制代码运行结果:
实现methodB方法...500这是默认方法...0.0复制代码
从运行结果可见,代码第①行调用默认方法methodC,是调用类AB中的实现。代码第②行调用默认方法methodD,是调用接口InterfaceA中的实现。代码第③行调用接口静态方法,只能通过接口名(InterfaceA)调用,不能通过实现类ABC调用,可以这样理解接口中声明的静态方法与其他实现类没有任何关系。
经过前面的学习,广大读者应该对于抽象类和接口有所了解,但可能会有这样的疑问抽象类和接口有什么区别?本节就回答这个问题。
归纳抽象类与接口区别如下:
接口支持多继承,而抽象类(包括具体类)只能继承一个父类。
接口中不能有实例成员变量,接口所声明的成员变量全部是静态常量,即便是变量不加public static final修饰符也是静态常量。抽象类与普通类一样各种形式的成员变量都可以声明。
接口中没有包含构造方法,由于没有实例成员变量,也就不需要构造方法了。抽象类中可以有实例成员变量,也需要构造方法。
抽象类中可以声明抽象方法和具体方法。Java 8之前接口中只有抽象方法,而Java 8之后接口中也可以声明具体方法,具体方法通过声明默认方法实现。
提示 学习了接口默认方法后,有些读者还会有这样的疑问,Java 8之后接口可以声明抽象方法和具体方法,这就相当于抽象类一样了吗?在多数情况下接口不能替代抽象类,例如当需要维护一个对象的信息和状态时只能使用抽象类,而接口不行,因为维护一个对象的信息和状态需要存储在实例成员变量中,而接口中不能声明实例成员变量。
通过对本章的学习,读者可以了解抽象类和接口的概念,掌握如何声明抽象类和接口,如何实现抽象类和接口。了解Java 8之后的接口的新变化。熟悉抽象类和接口的区别
醴陵微信公众号开发【醴陵网络推广】醴陵建站、醴陵网站维护、醴陵网页制作、醴陵微信小程序代运营公司