抽象类和接口都可以定义私有方法了,你还不知道? 接口和抽象类(JDK9及之后)

tech2026-03-03  1

真是不了解不知道,一看吓一跳类型。【接口可以定义私有private方法了,你知道吗?】

 

接口只可以定义以下类型方法:

interface AbstractAndInterface { private void pa2() { } //私有 private static void pa4(){} //私有静态 default void da2() { } //默认 public abstract void pua1(); //public抽象方法 public static void pua4() { } //public静态方法 //变量 public int m4 = 0; // public public static int m5 = 0; // static public static final int m6 = 0; //变量没有变,默认是public static final 修饰 }

 

抽象类只可以定义以下类型方法和变量:

abstract class clazz{ private void pa2() { } //私有 private static void pa4(){} //私有静态 protected abstract void pra1(); protected void pra2() { } protected static void pra4() { } public abstract void pua1(); public void pua2() { } public static void pua4() { } // 静态方法 //变量 不可以使用default,其他没有限制 int m0 = 0; private int m1 = 0; protected int m3 = 0; public static final int m6 = 0; }

总结一下:

接口:

            变量 : public static  final(默认)            方法: public abstrace(默认 公共方法的修饰)                       还可以有其他方法:私有方法;私有静态方法;默认方法;公共方法;公共静态方法

抽象类:

            变量 : public(默认)【默认只使用public 修饰】            方法:  抽象方法必须是protected级别及以上(默认protected

 

 


附测试代码,可以拷贝自己试一下

public abstract class AbstractClass { /************************** private *****************************/ /* 修饰符 abstract' 和'private' 的组合非法 */ private abstract void pa1(); private void pa2() { } //私有 /* 此处不允许使用修饰符 'final' */ private void final pa3(){} private static void pa4(){} //私有静态 /************************** default *****************************/ /* 修饰符 abstract' 和'default' 的组合非法 */ default abstract void da1(); /* 扩展方法只能在接口中使用 */ default void da2() { } //默认 /* 方法声明无效;需要返回类型 */ default void final da3(){} /* 修饰符 static' 和'default' 的组合非法 */ default static void da4() { } /************************** protected *****************************/ protected abstract void pra1(); protected void pra2() { } /* 方法声明无效;需要返回类型 */ protected void final pra3(){} protected static void pra4() { } /************************** public *****************************/ public abstract void pua1(); public void pua2() { } /* 方法声明无效;需要返回类型 */ public void final pua3(){} public static void pua4() { } // 静态方法 /************************** 变量 *****************************/ /************************** 变量 *****************************/ private int m1 = 0; /* 此处不允许使用修饰符 'default */ default int m2 = 0; int mm =0; protected int m3 = 0; public int m4 = 0; // public public static int m5 = 0; public static final int m6 = 0; final int m7 = 0; }

 

public interface AbstractAndInterface { /************************** private *****************************/ /* 修饰符 abstract' 和'private' 的组合非法 */ private abstract void pa1(); private void pa2() { } //私有 /* 此处不允许使用修饰符 'final' */ private void final pa3(){} private static void pa4(){} //私有静态 /************************** default *****************************/ /* 修饰符 abstract' 和'default' 的组合非法 */ default abstract void da1(); default void da2() { } //默认 /* 此处不允许使用修饰符 'final' */ default void final da3(){} /* 修饰符 static' 和'default' 的组合非法 */ default static void da4() { } /************************** protected *****************************/ /* 此处不允许使用修饰符 'protected' */ protected abstract void pra1(); /* 此处不允许使用修饰符 'protected' */ protected void pra2() { } /* 此处不允许使用修饰符 'final' */ protected void final pra3(){} /* 此处不允许使用修饰符 'protected' */ protected static void pra4() { } /************************** public *****************************/ public abstract void pua1(); //抽象方法 /* 接口抽象方法不能有本体 */ public void pua2() { } /* 此处不允许使用修饰符 'final' */ public void final pua3(){} public static void pua4() { } // 静态方法 /************************** 变量 *****************************/ /************************** 变量 *****************************/ /* 此处不允许使用修饰符 'private */ private int m1 = 0; /* 此处不允许使用修饰符 'default */ default int m2 = 0; /* 此处不允许使用修饰符 'protected */ protected int m3 = 0; public int m4 = 0; // public public static int m5 = 0; public static final int m6 = 0; }

测试抽象类的变量为protected级别,就得需要建立两个包,一个放抽象类及其实现类,一个放访问类。改变抽象类的变量级别,改变访问类是否继承抽象实现类,查看在访问类能否调用到变量。

 

1.在JDK7或更早版本中,接口里面只能有常量变量和抽象方法。这些接口方法必须由选择实现接口的类实现。 2. JDK8的时候接口可以有默认方法和静态方法功能。 3. JDK9在接口中引入了私有方法和私有静态方法。

 

 

最新回复(0)