一:今天完成
上午详细了解了java面向对象编程的一些细节,记录如下。
1)类
是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法、初始化程序和嵌套类型。
常用成员有四种:类字段、类方法、实例字段、实力方法。
其它引用类型还包括数组、接口、枚举和注解。
2)字段和方法
示例:一个简单的类和成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
class
Circle{
//类字段
public
static
final
double
PI=
3.14159
;
//类方法
public
static
double
radiansToDegrees(
double
radians){
return
radians *
180
/ PI;
}
//实例字段
public
doule r;
//两个实例方法
public
double
area(){
return
PI*r*r;
}
public
double
circumference(){
return
2
*PI*r;
}
}
|
还有就是this的使用,它竟然是一个隐式参数!第一次知道,,也可能是我之前没留意。意义是“在当前对象上调用实例方法”。
3)创建和初始化对象
构造方法看作是类成员,可以定义多个构造方法,只要参数列表不一样就行。在一个构造方法中也可以调用其它构造方法,可以避免大量的初始化代码。
4)子类和继承
对于super关键字,需要了解的是:在子类中调用超类构造方法时必须在第一个语句中调用。代码如下
1
2
3
4
5
|
publc PlaneCircle(
double
x;
double
y;
double
r){
super
(r);
//调用超类的circle()构造方法
this
.cx=x;
this
.cy=y;
}
|
这里面涉及到构造方法链,就是创建对象时的一系列构造方法,从子类到顶端的Object类为止。
如何引用被遮盖的字段?把this(或 类的实例)矫正为适当的超类,然后再访问字段。
例如有三个类A、B和C。它们都定义了一个x的字段,并且C是B子类,B是A子类,那么,在C中可以这样
1
2
3
4
5
6
7
8
9
|
x;
//c类
this
.x;
//c类
super
.x;
//B类
((B)
this
).x;/B类
((A)
this
).x;
//A类<br>类似的,如果c是C的实例,那可以这样引用<br>c.x;<br>((B)c).x<br>((A)c).x
|
还需要分清方法覆盖和字段遮盖。
注意调用覆盖方法时的super和调用超类时的super用法是不一样的。
5)数据隐藏和封装
java的包不能“嵌套”,比如java.A.a和java.A是不同的包
对于访问控制和继承,如下
总结了一下成员访问规则,如下
对于有些数据访问器方法(getter,setter),需要记住的是,public方法访问字段可以进行检查。
6)抽象类和方法
有些抽象类可以没有任何抽象方法,比如classLoder。
示例代码:一个抽象类和两个具体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
abstract
class
Shape{
//两个抽象方法
public
abstract
double
area();
public
abstract
double
circumference();
}
//具体子类
class
Circle
extends
Shape{
public
static
final
double
PI=
3.14159265358
;
//类字段
protected
double
r;
//实例字段
public
Circle(
double
r){
this
.r=r}
//构造方法
public
double
getRadius(){
return
r;}
//访问器
public
double
area(){
return
PI*r*r ;}
//实现的两个抽象方法
public
double
circumference(){
return
2
*PI*r ;}
}
|
对象之间也可以发生转换,分为放大和缩小转换
1
2
|
Object o=
"string"
;
//放大
String s= (String)o;
//缩小
|
数组转换规则只适用由对象或数组 组成的数组,基本类型的数组不能转换。
二:下午计划
看完并记录java类型系统这一章,有时间的话开始做那个任务一的第一个板块
三:遇到问题
为什么感觉平时写代码没有感觉到有这么多的知识点?是没用到吗?还是自己缺少思考?
四:收获感悟
相对于其它面向对象的语言,java真可以说的上是入门首选,即便它有时候会显得啰嗦一点。