[b]继承,,,[/b]
继承 用来表达概念上具体化延续的具体概念.
子类是类型的具体化(特化), 父类是子类的泛化(概念抽象化)
1 子类继承父类的属性和方法
2 构造器不能继承!
3 实例化子类,会递归分配所有父类的空间
4 子类默认调用父类的无参数构造器
关于继承中的构造器:
1 子类递归调用父类构造器。
2 默认调用父类无参数构造器!
3 如果父类没有无参数构造器,就必须在子类中明确指定调用
父类的有参数构造器!
4 使用super()调用父类构造器,必须写在子类构造器第一行
5 编程建议:所有的类都提供无参数构造器!减少继承时候的
麻烦。
关于对象的实例化过程:
1 检查类是否加载,如果没有加载就加载这个类,
要加载所有父类。
懒惰式加载(按需加载):如果第一次用到就加载,
只加载一次。通过CLASSPATH指定的路径寻找类文件,
加载以后是一个对象,类型是Class。
获得这个类对象:Student.class-> Class 实例
2 在内存堆中分配对象空间。递归分配所以父类属性空间。
属性默认自动初始化。自动初始化为“0”值。
3 进行属性的赋值。
4 递归调用父类构造器。(默认调用父类无参数构造器!)
5 调用本类构造器。
访问控制
1 public
2 protected
3 default 很少使用,很少使用package作为访问控制的边界
4 private
声明属性和方法尽可能私有。这样才能做到尽可能的封装。
提供适当的属性访问方法,适当的开放属性的访问。
不建议使用非公有类。就是说所有类都应该是公有的,并且
一个源文件一个类。
继承中的语法现象
1 父类型可以引用子类型的实例,父类型的实现是多态的!
2 子类可以覆盖父类的方法,修改父类的行为。
方法覆盖:子类覆盖了父类“相同方法签名”的方法。
方法的覆盖是由方法动态绑定实现的,就是Java虚拟机运行
时候确定执行那个方法,java最终执行子类的方法。
关于JavaBean
1 JavaBean 不是语法规范,是习惯性编程规范,用这个规范
写的类使用方便。有时候JavaBean的类也称为:POJO
Plan Old Java Object
2 规范:
a 必须有包.
b 是一个Java类,具有无参数构造器。
c 有用getXxx() 和 setXxx() 声明的Bean属性。
如:getName() 和 setName(String n) 声明的
Bean属性为:name, 与是否有实例变量name无关.
boolean类型的get方法可以有两种形式:
getMarried() 或者 isMarried()
d 必须实现序列化接口(在学习IO的时候具体学习。)
e JDK提供的类几乎都符合JavaBean规范。
如:String
3 JavaBean 最大的好处:“使用方便”
引用类型转换(是引用变量的类型的转换!)
1 向下转型(自动类型转换),是小类型到大类型的转换
如:
Circle c = new Circle(1,2,3);
Shape s = c;//表示圆一定是图形
2 向上造型(强制类型转换),是大类型到小类型。
如:
Shape s = new Circle(1,2,3);
Cirlcle c = (Circle)s; //当s实际引用圆时候,能够转换成功
s = new Rectangle(1,1,2,2);
Circle c2 = (Circle) s;//出现类型转换异常,因为
// s引用的是Rectangle 不是圆实例。
3 instanceof 运算符,用来检查引用对象的类型。 //instanceof是运算符
经常与“引用类型强制转换”配合,实现安全的类型转换,
避免类型转换异常。
static 修饰词(关键字),都是用来修饰类的成员的。
1 静态修饰的成员变量,是属于类级别的变量,是在类的加载
期间分配的,所有类和类的实例共享的一个变量,相当于全局
变量。一般使用类名访问静态属性:
Koo.x = 3;
继承 用来表达概念上具体化延续的具体概念.
子类是类型的具体化(特化), 父类是子类的泛化(概念抽象化)
1 子类继承父类的属性和方法
2 构造器不能继承!
3 实例化子类,会递归分配所有父类的空间
4 子类默认调用父类的无参数构造器
关于继承中的构造器:
1 子类递归调用父类构造器。
2 默认调用父类无参数构造器!
3 如果父类没有无参数构造器,就必须在子类中明确指定调用
父类的有参数构造器!
4 使用super()调用父类构造器,必须写在子类构造器第一行
5 编程建议:所有的类都提供无参数构造器!减少继承时候的
麻烦。
关于对象的实例化过程:
1 检查类是否加载,如果没有加载就加载这个类,
要加载所有父类。
懒惰式加载(按需加载):如果第一次用到就加载,
只加载一次。通过CLASSPATH指定的路径寻找类文件,
加载以后是一个对象,类型是Class。
获得这个类对象:Student.class-> Class 实例
2 在内存堆中分配对象空间。递归分配所以父类属性空间。
属性默认自动初始化。自动初始化为“0”值。
3 进行属性的赋值。
4 递归调用父类构造器。(默认调用父类无参数构造器!)
5 调用本类构造器。
访问控制
1 public
2 protected
3 default 很少使用,很少使用package作为访问控制的边界
4 private
声明属性和方法尽可能私有。这样才能做到尽可能的封装。
提供适当的属性访问方法,适当的开放属性的访问。
不建议使用非公有类。就是说所有类都应该是公有的,并且
一个源文件一个类。
继承中的语法现象
1 父类型可以引用子类型的实例,父类型的实现是多态的!
2 子类可以覆盖父类的方法,修改父类的行为。
方法覆盖:子类覆盖了父类“相同方法签名”的方法。
方法的覆盖是由方法动态绑定实现的,就是Java虚拟机运行
时候确定执行那个方法,java最终执行子类的方法。
关于JavaBean
1 JavaBean 不是语法规范,是习惯性编程规范,用这个规范
写的类使用方便。有时候JavaBean的类也称为:POJO
Plan Old Java Object
2 规范:
a 必须有包.
b 是一个Java类,具有无参数构造器。
c 有用getXxx() 和 setXxx() 声明的Bean属性。
如:getName() 和 setName(String n) 声明的
Bean属性为:name, 与是否有实例变量name无关.
boolean类型的get方法可以有两种形式:
getMarried() 或者 isMarried()
d 必须实现序列化接口(在学习IO的时候具体学习。)
e JDK提供的类几乎都符合JavaBean规范。
如:String
3 JavaBean 最大的好处:“使用方便”
引用类型转换(是引用变量的类型的转换!)
1 向下转型(自动类型转换),是小类型到大类型的转换
如:
Circle c = new Circle(1,2,3);
Shape s = c;//表示圆一定是图形
2 向上造型(强制类型转换),是大类型到小类型。
如:
Shape s = new Circle(1,2,3);
Cirlcle c = (Circle)s; //当s实际引用圆时候,能够转换成功
s = new Rectangle(1,1,2,2);
Circle c2 = (Circle) s;//出现类型转换异常,因为
// s引用的是Rectangle 不是圆实例。
3 instanceof 运算符,用来检查引用对象的类型。 //instanceof是运算符
经常与“引用类型强制转换”配合,实现安全的类型转换,
避免类型转换异常。
static 修饰词(关键字),都是用来修饰类的成员的。
1 静态修饰的成员变量,是属于类级别的变量,是在类的加载
期间分配的,所有类和类的实例共享的一个变量,相当于全局
变量。一般使用类名访问静态属性:
Koo.x = 3;