添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

接口中除了这几个常见的方法和属性外还有一些其他用法。

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 的接口时都是不带修饰符的public interface Test { int a = 0; void test();}其实这个里面有好多修饰符都是默认省略掉了。正确的类型应该是:public interface Test { public static final int a = 0; public void test();}public...
本篇文章总结一下Java的访问修饰符,虽然这样的总结在网上已经有很多了,但是作为基础部分,还是要亲自总结一下,才能加深记忆。 文章目录1. 访问修饰符有哪些,可以用在什么地方2. 类 1. 访问修饰符有哪些,可以用在什么地方 Java的访问修饰符有四种,分别是publicprotected,默认,private。主要作用是控制类之间的数据的访问权限。这些修饰符可以修饰Java元素有下面这些: 类方法 接口方法的字段 接口的字段 注意,方法的形式参数和方法的局部变量是不.
静态变量仅在局部函数域存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:复制代码 代码如下:function test(){static $a=0;$a++;echo $a;}test();//1test();//2test();//3Note: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。复制代码 代码如下:static $a=0+1;static $a=sqrt(121);像上面的赋值方式会报错,不信你试试 您可能感兴趣的文章:浅谈php的访问修饰privateprotected、p
抽象类和抽象方法   在Java中用abstract修饰的类是抽象类,用abstract修饰的类的方法是抽象方法,抽象类和抽象方法用法总结如下。   1.abstract可以修饰class表示抽象类,可以修饰方法表示抽象方法,但是不能修饰成员变量,也是没有抽象的成员变量。   2.用abstract修饰的类可以有abstract方法,也可以没有abstract方法;可以有非abstract方法,也可以没有非abstract方法。   3.只有abstract类才能声明abstract方法,abstract方法不能声明在非abstract类。   4.abstract类可以是外部
Java有四种访问修饰符用于控制类、接口变量方法的封装程度。这四种修饰符分别为: private 私有的,类可见性 package/friendly/default 包级别的/友好的/默认的,包可见性 protected 受保护的,不同包,子父类可见性 public 公共的,项目可见性 其变量方法可以用四种修饰修饰,而类和接口仅能用publicdefault修饰。 类之间的关系 类和类之间的关系有如下几种: 以Hero为例 自身:指的是Hero自己 同包子类:ADHero这
接口方法访问权限可以是publicdefaultprivate,那为何不可以是protected呢?protected级别不是在四者间吗? 首先我们先回顾一下下面这张熟悉的访问权限表: 那么我们能够发现protected是可以让不同包的子类去进行调用的,那么我们想想一个类可能是一个接口的子类吗?显然不可能,类只能实现接口,但那不叫继承接口。虽然接口也是有子接口的,但那又如何呢,类还是无法继承接口啊。而如果defaultprivate就能够让类实现接口里的方法,那么protected的存在
这篇文章主要介绍了python字典setdefault方法和get方法使用实例,文通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python的字典对象,可以直接使用键名获取键值,像这样: >>> d = {"x":1,"y":2} >>> d["x"] >>> d["y"] 但如果键名不存在,则会报错: >>> d["z"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'z' 这就影响了代码的可执行性。
抽象类方法 JDK 1.8以前,抽象类的方法默认访问权限为protected(可以是publicprotected) JDK 1.8时,抽象类的方法默认访问权限变为默认访问权限(可以是publicprotected或者不写) 接口方法 JDK 1.8以前,接口方法默认,也必须是public的(只能用public) JDK 1.8时, 答案:ABD 这考的是接口属性的知识点,类型是public static final,且访问权限只能是public 意味着是个常量所以必须初始化且不能再更改了,结合下面图理解以下。 public int... 方法命名如图: 不要使用魔鬼数字,用有意义的常量代替。SQL或日志的字符串,不应视为“魔鬼数字”,不需定义为字符串常量;不应该取NUM_FIVE = 5或NUM_5 = 5这样的魔鬼常量。 避免使用否定的布尔变量名,