设计三角形类SJ,内有三个double 型成员代表三条边,有一个无参构造函数可创建三边值均为1的单位三角,通过setEdges(x,y,z)来修改三边的值,通过equals(t)判断是否与(t)全等。要求:若新的边值不满足三角形约束“三边均为正值且任意两边之和大于第三边”,则不允许修改三边的值。打印三角形时,输出三条边的具体值。
目的:认识public、private权限的基本作用和应用场合/设计:1.需要禁止用户直接存取三边值(能存取就直接修改),用private修饰三条边来实现;2.setEdges()方法必须所有用户都能接触到,用public修饰实现
class SJ{
private double a,b,c; //三条边属性
public SJ() {a=1;b=1;c=1;} //创建一个单位三角
private boolean limit(double x,double y,double z) {//三角形的约束条件
return (x>0&&y>0&&z>0&&x+y>0&&x+z>0&&y+z>x);
}
public void setEdges(double x,double y,double z) {
if(limit(x,y,z)==false)return ; //不满足约束条件,则不能修改
else {a=x;b=y;c=z;}
}
public String toString() {return "a="+a+",b="+b+",c="+c;}
public boolean equals(SJ t) {
String s=a+","+b+","+c; //将三边连接成字符串
String x,y,z; x=t.a+"";y=t.b+"";z=t.c+"";//将三边转变成字符串
if(s.indexOf(x)<0)return false;//若x在s中不存在,则不可能全等
else s=s.replaceFirst(x,"#");//把s中的x用#替换,即删除其中的x
if(s.indexOf(y)<0)return false;
else s=s.replaceFirst(y,"#");//把s中的y用#替换,即删除其中的y
if(s.indexOf(z)<0)return false;//此前已有两条边相等
else return true;
}
}
class App{
public static void main(String[] args) {
SJ t1,t2,t3; t1=new SJ();
//下面模拟能否不通过t的对外接口(即public方法),直接存取t的private成员
//t.a=2;t.limit(2,3,4)//两条语句均会产生编译错:因为外部不能使用private成员
t1.setEdges(1,2,3);System.out.println("赋值1,2,3,t1: "+t1);
t1.setEdges(2,3,4);System.out.println("赋值2,3,4,t1: "+t1);
t2=new SJ();t2.setEdges(3,4,2);System.out.print("t2:"+t2);
t3=new SJ();t3.setEdges(3,4,5);System.out.print("\tt3:"+t3);
System.out.print("\n");
System.out.print(" t1==t2: "+t1.equals(t2));
System.out.print(" \tt1==t3: "+t1.equals(t3));
}
}
分析:
1.权限用于标注“类及其成员”何时能使用(即可视)。
2.用private修饰的成员,在类外部就不能使用。
3.用public修饰的成员,通常是类对外提供的服务。即:类的设计者希望通过public来操纵类或对象的使用。