基本数据类型的类封装
JAVA:真正意义上的纯面向对象编程语言。
”纯“:体现在程序中的一切都可以用类来描述,甚至连最简单的基本数据类型(如int,char,double,float等)都可以完全用类来取代。
那么为什么要用包装类呢,使用对应的包装类,对我们有什么好处?
如何使用基本数据类型对应的类?
-
基本数据类型名与类名的区别是:首字母是否大小写。类名首字母是大写的。
-
类对象返回基本数据类型的值:xxx.Value方法。xxx为基本数据类型名。
示例:
Integer a = 4;
Float b = new Float(3.4f);//Float b = 3.4f;
String d = b.toString();//调用包装类对象的toString方法把数值以字符串的形式返回。
float c = b.floatValue();
float e = Float.parseFloat(d);//调用包装类的类方法parseXXX(XXX为包装类类名),将字符串转换为对应基本类型的数值
- 可以用new运算符创建基本数据类型的包装类,但不建议这么做。因为从JDK9开始,用new创建包装类的对象已经被视为过时了。
- 建议用一个基本数据类型常量或变量初始化包装类变量即可。上面的第一行代码就是用1个常量4初始化的方法创建了一个内部值为4的Interger对象,并让变量a引用该对象。
- 其它类型的包装类对象建议都这样创建。
此外,关于包装类的用法,详细大家可以参考java.lang包下面的相应的帮助文档。
类的外部访问权限控制
类的访问权限的控制机制:封装性的表现之一。
设置合理的外部访问权限,有利于类使用的安全性和方便性。
在类、成员变量和方法声明前加合适的权限控制关键词或不加关键词。
加关键词:
- public(公开)
- protected(保护)
- private(私有)
一个源文件,可以包含多个类,该文件中最多只有一个类可以用public关键字修饰。并且源文件的基本名要和public类的类名相同。
- 此外,3个控制外部访问权限的关键字添加必须放到最前面。例如:
- public class DemoClass…
- protected int a;
- public void doSomething(){…}
- 不加权限关键字的类,称为友好类。
- 不加权限关键字的成员,称为友好成员(包括友好数据成员和友好方法成员)
友好:对同一个包中的其他类友好。
某个类声明为友好类:同一个包中的其他类可以访问,对于不在同一个包中的其它类不能访问。
protected成员比友好成员的外部访问权限要多一点,就是继承。子类可以继承protected成员,但是不能继承友好成员。
综上:
- public最大方
- protected有的吝啬
- 友好更吝啬
- private最自私
例子:
package com.oop.shape;//包的声明语句
public class Triangel {
protected double sideA;
protected double sideB;
protected double sideC;
public Triangel(double a, double b, double c) throws Exception {
if (!isValid(a, b, c)) {
throw new Exception("不能构成三角形!");
}
setSide(a, b, c);
}
public static boolean isValid(double a, double b, double c) {
if (a <= 0 || c <= 0)
return false;
if (a + b <= c || a + c <= b || b + c <= a)
return false;
return true;
}
public void setSide(double a,double b,double c)throws Exception{
if(Triangel.isValid(a,b,c)){
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
}
else
throw new Exception("不能构成三角形!");
}
public double getSideA(){
return sideA;
}
public double getSideB() {
return sideB;
}
public double getSideC() {
return sideC;
}
public double getArea(){
double s = (sideA+sideB+sideC)/2;
double res = s*(s-sideA)*(s-sideB)*(s-sideC);
return Math.sqrt(res);
}
}
如果不希望用户直接随意更改数据成员的值,就可以将数据成员设为private或protected或友好成员,提供public方法,让用户只能通过方法的调用间接修改数据成员的值。
通过这个例子,我们知道在设置类的外部访问权限时,应站在类的外部用户的角度去思考这样一个问题,设置哪一种权限能够确保用户使类时,既方便又”安全“。