java 接口中用private、protected、public、default和status修饰方法和变量
来源:互联网 发布:淘宝网的盈利模式答案 编辑:程序博客网 时间:2024/05/20 10:56
public interface Test { int a = 0; void test();}
其实这个里面有好多修饰符都是默认省略掉了。
正确的类型应该是:
public interface Test { public static final int a = 0; public void test();}省略的都是默认必须要带的修饰。
接口中除了这几个常见的方法和属性外还有一些其他用法。
1、静态方法
静态方法必须要有方法体,并且静态方法是不能被实现类实现的,只能通过接口调用这个方法,例如:Test.test2();
public interface Test { public static final int a = 0; public void test(); public static void test2(){ //正确的 } public static void test3();//错误的}
2、java1.8 default修饰方法
default加入就是为了解决接口中不能有默认方法的问题,在实现类中可以重写这个default方法也可以不重写。
default修饰的方法跟接口中的静态方法区别是default方法可以被实现类重写,这样可以得到扩展并且不修改原来接口中功能,而静态方法就有点太苛刻了,还不如把静态方法写在实现类中,这样每个实现类都可以自己写自己的功能实现。
public interface Test { public static final int a = 0; public void test(); public static void test2(){ System.out.println("test2"); } default void test3(){ } default void test4();//错误,default修饰方法必须要有实现体}
3、错误情况
在接口中方法都是不能用private和protected修饰的,这两种修饰就违背了面向对象的原则。
private好理解,接口是需要被实现才有意义的,不能被实现也就没有意义了。
protected需要理解面向对象的概念,protected是不在一个包内不能被访问,所以在类和接口不在同一个包内时就会有问题。
假设public接口I有一个protected方法M,那么位于其他包的public类C就可以实现这个接口(方法M依然是protected)。那么C的同包类D调用方法M只能这样访问:
C c = new C();c.M();无法这样访问:
I c = new C();c.M();
这样就失去了使用接口的重要意义:提供统一的接口,面向接口编程思想也无法体现。
4、为什么接口中的属性必须是public static final 修饰的
public跟方法的原因一样了
static:我们假设有两个接口A和B,而类C实现了接口A和B。假设,此时,A和B中都有一个变量N,如果N不是static类型的,那么在C中该如何区分N到底是A的还是B的呢?而,如果是static类型的,我们可以通过A.N和B.N来区别调用A或者B中的成员变量N。
final:接口是一种通用的协议存在的,多个类实现同一个接口可以方便针对这个接口的调用类对接,所以final就是为了禁止在接口中不同的实现类修改属性造成混乱。如果变量不是final,那么每个实现接口的类就可以更改这个变量的值,也就违反了OCP(开闭原则)原则。
对于java接口的功能还是需要在使用中慢慢理解,掌握其中微妙的变化带来的不同功能。
- java 接口中用private、protected、public、default和status修饰方法和变量
- Java中四种访问修饰符private、public、protected和default
- Java修饰符private、protected、public和default的区别
- Java中的private、protected、public和default
- java 修饰符public protected default private
- Java 中访问修饰符public,private,protected和default(friendly) 的区别
- 用例子理解Java权限修饰符(private,default,protected和public)
- java中的4个修饰符default/public/protected/private的作用和作用范围
- 【Java关键字-访问范围修饰符】private、protected、public和default的区别
- 用例子理解Java权限修饰符(private,default,protected和public)
- Java四种权限修饰符(public, default, protected, private)的用法和对比
- Java中private、protected、public和default修饰符的访问限制
- Java的public、protected、default和private权限
- Java中的private、protected、public和default的区别
- Java中的private、protected、public和default的区别
- Java中的private、protected、public和default的区别
- Java中的private、protected、public和default的区别
- Java中的private、protected、public和default的区别
- Oracle-intersect-minus等日常函数
- Jmeter微型压力测试
- ArrayList源码阅读笔记
- RTTI
- UE4 动态修改材质 控制颜色和贴图
- java 接口中用private、protected、public、default和status修饰方法和变量
- jstl中c:if的使用
- tensorflow中tf.contrib.learn.preprocessing.VocabularyProcessor理解
- mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
- ArcGIS矢量图的配准
- c#通过app.manifest使程序以管理员身份运行
- 增强学习之蒙特卡洛方法
- 图的遍历
- [deeplearning-007]深度学习的核心bp算法的原创论文1986nature