教材学习内容总结
第五章 对象封装
5.1 何谓封装
- 封装实际上使用方法将类的数据隐藏起来,隐藏对象细节,将对象当作黑箱操作,用户不用再需要重复撰写对象初始化流程
class CashApp {
String number;
int balance;
int bonus;
CashApp(String number,int balance,int bonus){
this.number = number;
this.balance = balance;
this.bonus = bonus;
}
}
public class CashCard{
public static void main(String[] args){
CashApp[] cards = {
new CashApp("A001",500,0),
new CashApp("A002",300,0),
new CashApp("A003",1000,1),
new CashApp("A004",2000,2),
new CashApp("A005",3000,3),
};
for(CashApp card : cards){
System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
}
}
- 在类中定义方法,如果不用返回值,方法名称前可声明
void
,方法若会返回值,必须在方法前声明返回值的类型 -
自由存取类私有数据,使用
private
定义,也可以用在方法或构造函数声明,也可以用在内部类声明5.2 类语法细节
- 三个权限修饰:
public
、private
、protected
public
权限修饰- 如果想在其他包的类程序中存取某包的类或对象成员,则该类或对象成员必须是公开成员,用
public
加以声明 - 声明类为
public
,表示它是个公共类,可以在其他包的类中使用 - 声明构造函数为
public
,表示其他包中的类可以直接调用这个构造函数 - 声明方法为
public
,表示其他包的方法中可以直接调用这个方法 - 声明数据成员为
public
- 如果想在其他包的类程序中存取某包的类或对象成员,则该类或对象成员必须是公开成员,用
- 定义类时,可以使用构造函数定义对象建立的初始流程
- 构造函数是与类名称同名,无须声明返回类型的方法
- 编译程序会在你没有撰写任何构造函数时,自动加入默认构造函数
- 在没有编写任何构造函数时,也可以
Some some = new some();
这样以无自变量方式调用函数 - 重载构造函数:定义多个构造函数,只要参数类型或个数不同
-
调用方法
valueOf()
根据传递的自变量类型不同,会调用对应的方法
class Some{
void someMethod(int i){
System.out.println("int 版本被调用");
}
void someMethod(Integer integer){
System.out.println("Integer 版本被调用");
}
}
public class OverloadBoxing {
public static void main(String[] args){
Some s = new Some();
s.someMethod(1);
}
}
- 除被声明
static
的地方外,this
关键字可以出现在类中的任何地方,在对象建立后为“这个对象”的参考名称 this()
代表调用另一个构造函数,根据调用时给的自变量类型与个数定调用哪个函数,只能出现在构造函数的第一行- 在创建对象后、调用函数前,若有想执行的流程,可以用
{}
定义 - 如果撰写了对象初始化区块,对象建立之后会先执行对象初始区块,接着再调用指定的构造函数
- 对象数据成员被声明为
final
,但没有明确用=
指定值,表示延迟对象成员值的定义,但在构造函数执行流程中,一定要有对该数据成员指定值的动作 static
不用每个对象各自拥有,表示它属于类- 通过
类名称.static成员
取得static
成员 static
方法或区块中,不能调用非static
方法或区块,可以使用static
数据成员或方法成员import static
解析顺序:1.局部变量覆盖2.成员覆盖3.重载方法比较- 使用不定长度自变量,声明参数列时要在类型关键字后加
...
,方法上声明的不定长度参数必须是参数列最后一个 - 使用两个不定长度参数列是不合法的
- 内部类:在类中再定义类
- 内部类可以用
public
、protected
、private
声明 - 内部类本身可以存取外部类成员
- 非静态内部类会声明为
private
- 被声明为
static
的内部类,将外部类当作名称空间,Some.Other o = new Some.Other()
- 被声明为
static
的内部类,虽然将外部类当作名称空间,但是算是独立类,只可以存取外部类static
成员 - 方法中也可以声明类,辅助方法中演算,方法外无法使用
- java中只有传值调用
总结:
封装
- 封装目的主要是隐藏对象细节。
- 使用
private
定义私有成员,封装了类私有数据,让用户必须通过你提供的操作方法,经过你定义的流程才有可能存取私有数据。
类语法
- public为公开类,在构造函数上声明public表示其他包中的类可以直接调用这个构造函数,在方法上声明public表示其他包的方法可以直接调用这个方法。
- 没有定义任何权限关键字时,就是包权限。
- 只有编译程序自动加入的构造函数,才成为默认构造函数,如果自行撰写无参数、没有内容的构造函数就不称为默认构造函数了。
重载构造函数
- 可以定义多个构造函数,只要参数类型或个数不同。
- 定义方法时也可以进行重载,虽然调用的方法名称相同,但根据传递的自变量类型不同,会调用对应的方法。
其他(感悟、思考等)
补的学习总结……顺便复习吧……
参考资料
- 《Java程序设计》