一.类的默认属性
1.p1/Father.java
package p1; public class Father { int x; int y; public Father() { } public String toString() { return "father:" + x + "," + y; } }//编译通过
2.p1/Test.java
package p1; public class Test { public static void main(String args[]) { Father f = new Father(); f.x = 1; f.y = 1; System.out.println(f); } }//编译通过
3.Son.java
package p1; public class Son extends Father { public void setX(int x) { this.x = x; } }//编译通过
4.p2/Test.java
package p2; import p1.*; public class Test { public static void main(String args[]) { Father f = new Father(); f.x = 1;//编译错误:x 在 p1.Father 中不是公共的;无法从外部软件包中对其进行访问 f.y = 1;//编译错误:y 在 p1.Father 中不是公共的;无法从外部软件包中对其进行访问 System.out.println(f); } }
5.p2/Son.java
package p2; import p1.*; public class Son extends Father { public void setX(int x) { this.x = x;//编译错误:x 在 p1.Father 中不是公共的;无法从外部软件包中对其进行访问 } }
6.结论
默认属性只供同包的类访问,不支持继承
二.接口的默认方法
1.p1/Shape.java
package p1; public interface Shape { void draw(); }
2.p2/Triangle.java
package p2; import p1.*;
public class Triangle implements Shape{ void draw() { System.out.println("这是一个三角形"); } } 编译出错:
p2/Triangle.java:5: p2.Triangle 中的 draw() 无法实现 p1.Shape 中的 draw();正在
尝试指定更低的访问权限;为 public
void draw() {
3.p3/Test.java
package p3; import p1.*; import java.lang.reflect.*; public class Test { public static void main(String args[]) { Method[] m = Shape.class.getDeclaredMethods(); for (Method m0: m) { System.out.println(m0.getName() + ":" + getModifiers(m0.getModifiers())); } } public static String getModifiers(int flag) { String ret = ""; ret = ret + (Modifier.isAbstract(flag)?"abstract,":""); ret = ret + (Modifier.isFinal(flag)?"Final,":""); ret = ret + (Modifier.isInterface(flag)?"Interface,":""); ret = ret + (Modifier.isNative(flag)?"Native,":""); ret = ret + (Modifier.isPrivate(flag)?"Private,":""); ret = ret + (Modifier.isProtected(flag)?"Protected,":""); ret = ret + (Modifier.isPublic(flag)?"Public,":""); ret = ret + (Modifier.isStatic(flag)?"Static,":""); ret = ret + (Modifier.isStrict(flag)?"Strict,":""); return ret; } }
运行结果:draw:abstract,Public,
4.结论
接口中的方法即便不显式地声明为public,它也是public的.当要实现一个接口时,必须将接口方法定义为public.