3、控制对成员的访问权限有两个原因。
第一是为了使用户不要碰那些他们不该碰的部分这些部分对于类的内部操作是必要的,但是她并不属于客户端 程序员所需接口的一部分。因此将方法和域指定成private,对客户端程序员而言是一种服务。因为这样他们可以很清楚地看到什么对他们重要,什么是他们可以忽略的,这简化了他们对类的理解。
第二,这也是最重要的原因,为了让类库的设计者可以更改类的内部工作方式,而不必担心这样会给客户端程序员造成重大影响。访问权限控制确保不会有任何客户端程序员依赖于某个类的底层实现的任何部分。
4、程序案例分析
public class CleanSer { private String s="Cleanser";//private修饰的成员子类可以继承,但不能直接访问 public void append(String a){ s+=a; } public void dilute(){ append(" dilute()"); } public void scrub(){ append(" scrub()"); } public String toString(){ return s; } public static void main(String[] args) { CleanSer cl=new CleanSer(); cl.dilute(); cl.scrub(); printWithbr(cl); } public class Detergent extends CleanSer{ //重写父类的一个方法 public void scrub(){ append("Detergent.scrub()"); super.scrub();//调用父类版本 } //增加一个新方法 public void foam(){ append(" foam()"); } public static void main(String[] args) { Detergent de=new Detergent(); //de.s="zpc";//无法访问父类private修饰的成员,如将CleanSer类的s修饰符改成public则可以访问 de.dilute(); de.scrub(); de.foam(); printWithbr(de); printWithbr("调用CleanSer的main方法"); CleanSer.main(args);//在这个类里可以调用另外一个类的静态方法(包括main方法) } } /*OutPut: *Cleanser dilute()Detergent.scrub() scrub() foam() *调用CleanSer的main方法 *Cleanser dilute() scrub() */
zpc dilute()Detergent.scrub() scrub() foam() 调用CleanSer的main方法 Cleanser dilute() scrub()
public class CleanSer { //private String s="Cleanser";//private修饰的成员子类可以继承,但不能直接访问 public String s=null; public String getValue() { return s; } public void setValue(String s) { this.s = s; } public void append(String a){ s+=a; } public void dilute(){ append(" dilute()"); } public void scrub(){ append(" scrub()"); } public String toString(){ return s; } public static void main(String[] args) { CleanSer cl=new CleanSer(); cl.setValue("CleanSer"); cl.dilute(); cl.scrub(); printWithbr(cl); } } public class Detergent extends CleanSer{ //重写父类的一个方法 public void scrub(){ append("Detergent.scrub()"); super.scrub();//调用父类版本 } //增加一个新方法 public void foam(){ append(" foam()"); } public static void main(String[] args) { Detergent de=new Detergent(); de.setValue("Detergent"); de.dilute(); de.scrub(); de.foam(); printWithbr(de); printWithbr("调用CleanSer的main方法"); CleanSer.main(args);//在这个类里可以调用另外一个类的静态方法(包括main方法) } } /*输出 Detergent dilute()Detergent.scrub() scrub() foam() 调用CleanSer的main方法 CleanSer dilute() scrub() */
原文:http://blog.csdn.net/hellozpc/article/details/23345471