首页 > 代码库 > 06 面向对象(上)
06 面向对象(上)
作者:thoughtInShare 出处:http://www.cnblogs.com/thoughtInShare 欢迎转载,也请保留这段声明。谢谢!
类可以理解为自定义的数据类型,可以用来定义变量,定义的变量都是引用变量;
Java的三大特征:封装,继承,多态;使用private,protected,public修饰符来实现封装,提供extend来继承父类;
构造器用于对类实例进行初始化,构造器支持重载;如果多个构造器包含相同的初始化代码,则可以把这些初始化放在普通的初始化块里完成,初始化块总在构造器执行之前被调用;
另外,还有一种静态初始化,用于初始化类,在类初始化阶段被执行。
如果继承树里面某一个类需要初始化,系统将同时会初始化该类的所有父类;
(1)类定义
[修饰符] class 类名{
构造函数定义;
Field,
method,}
static修饰的成员不能调用没有static修饰的成员;构造器用于构造该类的实例;使用new来调用构造函数,返回该类的实例;
构造器是创建对象的根本途径,如果一个类没有构造器,将无法创建实例;
Field可以理解为成员变量,包括实例变量和类变量;
(2)static修饰的成员变量表明它属于这个类本身,而不属于该类的单个实例;static真正的作用急速用于区分Field,方法,内部类,初始化块是属于类本身,还是属于实例;
(3)构造器是一个特殊的方法,
[修饰符] 构造器名(形参列表)
{
//
}
构造器必须和类名相同;
构造器没有返回类型;其返回值是隐式的;
(4)this关键字
this关键字总是指向该方法的对象;即谁在调用这个方法,this就指向谁;
(5)如果要在静态方法中访问另一个普通方法,则只能重新创建一个对象;
(6)Java方法的参赛传递方式只有一种,值传递;所谓值传递,就是将实际参数的副本(复制品)传入方法内,而参数本身不会受到影响;
(7)方法重载,Java允许同一个类里定于多个同名方法,只要形参列表不同即可;返回值类型不能用于区分重载方法;
(8)一个类在使用之前要经过 类架子,类验证,类准备,类解析,类初始化等几个阶段;成员变量不用显式初始化,局部变量除形参外,都必须显式初始化;
当系统加载类或创建类的实例时,系统自动为成员变量分配内存空间,并为成员变量指定初始值;
局部变量不属于任何类或实例,它总是保存在其所在方法的栈内存中;
(9)package import import static关键字
package机制,提供多层的命名空间,用于解决类的名字冲突问题;
import 用于导入某个指定宝层次下的某个类;
import static 用于导入静态field,或方法;
(10)构造器是一个特殊的方法,用于创建实例执行初始化。
构造器创建对象的模式= 使用工程模式+反射
构造器不能被直接调用,构造器必须使用new关键字来调用;为了使构造器B可以调用构造器A的初始化代码,可以使用this关键字来调用相应的构造器;但是必须作为构造器执行体的第一条语句;
(11)继承的特点
Java继承使用extend关键字,具有单继承的特点,即一个子类只有一个直接父类;
子类包含于父类同名方法的现象被称作方法重写,也称作方法覆盖;
方法的重写遵循规则,方法名相同,形参列表相同,子类返回类型比父类方法返回类型更小或相等;子类方法的访问权限比父类更大或相等;
当子类覆盖了父类的方法后,子类对象将无法访问父类中被覆盖的方法,但是可以在子类的方法中调用父类被覆盖的方法;使用super关键字;
super用于限定该对象调用它从父类继承得到的Field或方法;
(12)重载发生在同一个类的多个同名方法,而重写发生在子类和父类的同名方法之间;
(13)如果子类定义的Field和父类同名,则会发生子类隐藏父类Field的情形,可以用Super来访问;
(14)子类不会继承父类的构造器,但是可以使用super来父类的构造器;
系统会在执行子类构造器之前,隐式条用父类的无参构造器;
(15)多态
子类是一种特殊的父类,因此可以把一个子类对象直接赋给父类的引用变量;当调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,这就是多态;
与方法不同的是,父类的Field则不具有多态性特征;
(16)组合
继承破坏类的封装,组合则可以提供更好的封装性;组合即把该类当做另外一个类的组合部分,从而允许直接复用该类的Public方法;
继承是对已有的类做一番改造,而组合则是有明显的整体和部分的关系;
(17)初始化块
定义
修饰符{
//
}
初始化块没有名字,没有标识符,修饰符只能是static,修饰时称作静态初始化块;
当创建Java对象时,系统总是先调用该类里定义的初始化块,有几个调用几个,依序执行;隐式执行,而且在执行构造器之前;
初始化块对所有对象的处理完全相同;
静态初始化块是类相关的,系统将在类初始阶段执行静态初始化块,在创建对象则不再执行;
06 面向对象(上)