这里的default 与 显示出现的 default 关键字(下面) 不是一个意思。
https://blog.csdn.net/anyway8090/article/details/86366406
1.类的访问权限修饰符:决定该类是否可以被他类访问(能否创建对象),和继承。
2.成员变量和成员方法的修饰符:
(1)对于子类,决定是否能够直接访问,通过创建对象访问父类中的方法和protected访问修饰符失效,访问范围等价于default;
(2)对于无关类,决定能否通过创建对象访问;通过对象去访问就无法判断是否有父子关系,就没有不同包子类这种情况。
https://blog.csdn.net/u010876691/article/details/72724415
package cn.com.tes1;
public class DemoA {
private String S1="a";//private修饰的成员变量
String S2="b";//默认修饰符修饰的成员变量
protected String S3="c";//protected修饰的成员变量
public String S4="d";//public修饰的成员变量
//private修饰的成员方法
private void getS1() {
System.out.println(S1);
}
//默认修饰符修饰的成员方法
void getS2() {
System.out.println(S2);
}
//protected修饰符修饰的成员方法
protected void getS3() {
System.out.println(S3);
}
//public修饰符修饰的成员方法
public void getS4() {
System.out.println(S4);
}
}
default关键字介绍
default是在java8中引入的关键字,也可称为Virtual
extension methods——虚拟扩展方法。是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。
为什么要有这个特性?
首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的java8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。
妙文:https://blog.csdn.net/qq_35835624/article/details/80196932
总的来说,就是以前类实现接口必须对接口中的方法进行重写,但是当一个接口被太多类实现时,要写的工作量就变得更多了,而且当这个方法的功能高度内聚时,这样的行为就十分sb了。所以是不是只在接口中加入一个默认带有方法体的方法,让别的实现类不用重写,用到时直接调用接口中的这个默认方法。
对继承和接口的default方法: 类大于接口
引申:
在spring的@autowired标签接口中:
在 @Autowired 注解中就声明了一个名为 required 的 boolean 类型数据,其默认值是 true。
注意
静态方法缺失权限修饰,只能当前包下类可以调用,跨包不能调用。
详情博客:
https://blog.csdn.net/chuiren476328/article/details/100893677