封装,接口,继承,覆盖,构造过程,多态,static、this、super、final用法一、封装(encapsulation)定义:封装就是将客户端不应看到的信息包裹起来。使内部执行对外部来看不一种不透明的、是一个黑箱,客户端不需要内部资源就能达到他的目的。1.事物的内部实现细节隐藏起来2.对外提供一致的公共的接口――间接访问隐藏数据3.可维护性--------------------------------------------------------------------------------二、继承(inherit)JAVA继承特点继承:父类的成员能否继承到子类?对类成员访问的限制及子类继承情况:(从严到宽)private私有,本类内部不能继承(default)本类+同包同包子类可继承protected本类+同包+子类可以继承public公开任何地方都可以访问能继承到子类--------------------------------------------------------------------------------覆盖1、定义:覆盖了一个方法并且对其重写,以求达到不同的作用。2、用法:a、最熟悉的覆盖就是对接口方法的实现b、在继承中也可能会在子类覆盖父类中的方法3、产生“覆盖”的条件:1、方法名:相同2、参数表:相同(个数,类型)3、访问限制符:相同或者更宽4、返回值类型:相同或者子类返回的类型是父类返回的类型的子类5、不能抛出比subclass(父类)更多的异常注意:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。classParent{publicvoidnonStaticMethod(){System.out.println(Parent'sNon-StaticMethodisCalled);}publicstaticvoidstaticMethod(){System.out.println(parent'sstaticmethodiscalled);}}classChildextendsParent{publicvoidnonStaticMethod(){System.out.println(child'snon-staticmethodiscalled);}publicstaticvoidstaticMethod(){System.out.println(child'sstaticmethodiscalled);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Parentp1=newParent();Parentp2=newChild();Childc=newChild();System.out.print(Parent.static:);Parent.staticMethod();System.out.print(p1.static:);p1.staticMethod();System.out.print(p2.static:);p2.staticMethod();System.out.print(p1.nonStatic:);p1.nonStaticMethod();System.out.print(p2.nonStatic:);p2.nonStaticMethod();System.out.print(Child.static:);Child.staticMethod();System.out.print(c.static:);c.staticMethod();System.out.print(c.nonStatic:);c.nonStaticMethod();}}程序的运行结果为:Parent.static:parent'sstaticmethodiscalledp1.static:parent'sstaticmethodiscalledp2.static:parent'sstaticmethodiscalledp1.nonStatic:Parent'sNon-StaticMethodisCalledp2.nonStatic:child'snon-staticmethodiscalledChild.static:child'sstaticmethodiscalledc.static:child'sstaticmethodiscalledc.nonStatic:child'snon-staticmethodiscalled值得注意的是p2实际上是一个Child的类型的引用,然而在调用静态方法的时候,它执行的却是父类的静态方法,而不是Child的静态方法,而调用p2的非静态方法的时候执行的是Child的非静态方法,为什么呢?原因是静态方法是在编译的时候把静态方法和类的引用类型进行匹配,而不是在运行的时候和类引用进行匹配。因此我们得出结论:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。--------------------------------------------------------------------------------构造(java编程思想定义为:构造器初始化)对象的构造过程:首先为对象分配内存空间,包括其所有父类的可见或不可见的变量的空间,并初始化这些变量为默认值,如int类型为0,boolean类型为false,对象类型为null。。。。然后用下述5个步骤来初始化这个新对象:1)分配参数给指定的构造方法;2)如果这个指定的构造方法的第一个语句是用this指针显式地调用本类的其它构造方法,则递归执行这5个步骤;如果执行过程正常则跳到步骤5;3)如果构造方法的第一个语句没有显式调用本类的其它构造方法,并且本类不是Object类(Object是所有其它类的祖先),则调用显式(用super指针)或隐式地指定的父类的构造方法,递归执行这5个步骤;如果执行过程正常则跳到步骤5;4)按照变量在类内的定义顺序来初始化本类的变量,如果执行过程正常则跳到步骤5;5)执行这个构造方法中余下的语句,如果执行过程正常则过程结束。对分析本文的实例最重要的,用一句话说,就是“父类的构造方法调用发生在子类的变量初始化之前”。可以用下面的例子来证明:列1classAnimal{Animal(){System.out.println(Animal);}}classCatextendsAnimal{Cat(){System.out.println(Cat);}}classStore{Store(){System.out.println(Store);}}publicclassPetstoreextendsStore{Catcat=newCat();Petstore(){System.out.println(Petstore);}publicstaticvoidmain(String[]args){newPetstore();}}运行这段代码,它的执行结果如下:StoreAnimalCatPetstore最后312081494加这群可以一块学习java大型互联网技术从结果中可以看出,在创建一个Petstore类的实例时,首先调用了它的父类Store的构造方法;然后试图创建并初始化变量cat;在创建cat时,首先调用了Cat类的父类Animal的构造方法;其后才是Cat的构造方法主体,最后才是Petstore类的构造方法的主体。列2classAnimal{Animal(){System.out.println(Animal);}}classCatextendsAnimal{Cat(){System.out.println(Cat);}}classCat2extendsAnimal{Cat2(){System.out.println(Cat2);}}classStore{Cat2cat=newCat2();Store(){System.out.println(Store);}}publicclassPetstoreextendsStore{Catcat=newCat();Petstore(){System.out.println(Petstore);}publicstaticvoidmain(String[]args){newPetstore();}}运行这段代码,它的执行结果如下:AnimalCat2StoreAnimalCatPetstore这例1和例2,使我更了解了类的构造过程:类在new实例的时候a。第一步构造类的成员变量这里需要注意的:a)即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造函数)被调用之前得到初始化b)初始化的顺序是先“静态”对象(初始化过后,静态对象不会再被初始化),而后是“非静态”对象。第二步调用构造方法。b。如果有父类,那么就是先构造父类的成员变量,然后再调用父类的构造方法,然后再a。--------------------------------------------------------------------------------this用法java中的this随处可见,用法也多,现在整理有几点:1.this是指当前对象自己。当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中:publicclassHello{Strings=Hello;publicHello(Strings){System.out.println(s=+s);System.out.println(1-this.s=+this.s);this.s=s;System.out.println(2-this.s=+this.s);}publicstaticvoidmain(String[]args){Hellox=newHello(HelloWorld!);}}运行结果:s=HelloWorld!1-this.s=Hello2-this.s=HelloWorld!在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用classA{publicA(){newB(this).print();}publicvoidprint(){System.out.println(HellofromA!);}}classB{Aa;publicB(Aa){this.a=a;}publicvoidprint(){a.print();System.out.println(HellofromB!);}}publicclassC{publicstaticvoidmain(String[]args){Ax=newA();}}运行结果:HellofromA!HellofromB!在这个例子中,对象A的构造函数中,用newB(this)把对象A自己作为参数传递给了对象B的构造函数。2。在构造函数中,通过this可以调用同一class中别的构造函数,如classFlower{Flower(intpig){System.out.println(pig:+pig);}Flower(Stringss){ss=string;System.out.println(ss:+ss);}Flower(intpig,Stringss){this(pig);System.out.println(pigpig+pig);}}publicclassZx{publicstaticvoidmain(String[]args){Flowera=newFlower(7,java);}}运行结果:pig:7;pigpig:7;值得注意的是:1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。2:不能在构造函数以外的任何函数内调用构造函数。--------------