Java_面向对象的封装_继承_多态.doc
《Java_面向对象的封装_继承_多态.doc》由会员分享,可在线阅读,更多相关《Java_面向对象的封装_继承_多态.doc(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、封装,接口,继承,覆盖,构造过程,多态,static、this、super、final用法一、封装 (encapsulation) 定义:封装就是将客户端不应看到的信息包裹起来。使内部执行对外部来看不一种不透明的、是一个黑箱,客户端不需要内部资源就能达到他的目的。1事物的内部实现细节隐藏起来 2对外提供一致的公共的接口间接访问隐藏数据 3可维护性 -二、 继承 (inherit) JAVA继承特点 继承:父类的成员能否继承到子类? 对类成员访问的限制及子类继承情况: (从严 到宽 )private 私有,本类内部 不能继承(default) 本类同包 同包子类可继承 protected 本类同
2、包子类 可以继承public 公开 任何地方都可以访问 能继承到子类 -覆盖 1、定义: 覆盖了一个方法并且对其重写,以求达到不同的作用。2、用法:a、最熟悉的覆盖就是对接口方法的实现b、在继承中也可能会在子类覆盖父类中的方法3、产生 “覆盖”的条件:1、方法名:相同 2、参数表:相同(个数,类型) 3、访问限制符:相同或者更宽 4、返回值类型:相同 或者 子类返回的类型是父类返回的类型的子类 5、不能抛出比subclass(父类)更多的异常 注意:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。 class Parent public void nonStaticMeth
3、od() System.out.println(Parents Non-Static Method is Called); public static void staticMethod() System.out.println(parents static method is called); class Child extends Parent public void nonStaticMethod() System.out.println(childs non-static method is called); public static void staticMethod() Syst
4、em.out.println(childs static method is called); public class Test public static void main(String args) Parent p1 = new Parent(); Parent p2 = new Child(); Child c = new Child(); System.out.print(Parent.static: ); Parent.staticMethod(); System.out.print(p1.static: ); p1.staticMethod(); System.out.prin
5、t(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.nonStaticMetho
6、d(); 程序的运行结果为:Parent.static: parents static method is calledp1.static: parents static method is calledp2.static: parents static method is calledp1.nonStatic: Parents Non-Static Method is Calledp2.nonStatic: childs non-static method is calledChild.static: childs static method is calledc.static: child
7、s static method is calledc.nonStatic: childs non-static method is called值得注意的是p2实际上是一个Child的类型的引用,然而在调用静态方法的时候,它执行的却是父类的静态方法,而不是Child的静态方法,而调用 p2的非静态方法的时候执行的是Child的非静态方法,为什么呢?原因是静态方法是在编译的时候把静态方法和类的引用类型进行匹配,而不是在运行的时候和类引用进行匹配。因此我们得出结论:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。 -构造(java编程思想定义为:构造器初始化)对象的构造过程:
8、首先为对象分配内存空间,包括其所有父类的可见或不可见的变量的空间,并初始化这些变量为默认值,如int类型为0,boolean类型为false,对象类型为null。 然后用下述5个步骤来初始化这个新对象:1)分配参数给指定的构造方法;2)如果这个指定的构造方法的第一个语句是用this指针显式地调用本类的其它构造方法,则递归执行这5个 步骤;如果执行过程正常则跳到步骤5;3)如果构造方法的第一个语句没有显式调用本类的其它构造方法,并且本类不是Object类(Object是所有其它类的祖先),则调用显式(用super指针)或隐式地指定的父类的构造方法,递归执行这5个步骤;如果执行过程正常则跳到步骤5
9、;4)按照变量在类内的定义顺序来初始化本类的变量,如果执行过程正常则跳到步骤5;5)执行这个构造方法中余下的语句,如果执行过程正常则过程结束。对分析本文的实例最重要的,用一句话说,就是“父类的构造方法调用发生在子类的变量初始化之前”。可以用下面的例子来证明:列1class Animal Animal() System.out.println(Animal);class Cat extends Animal Cat() System.out.println(Cat);class Store Store()System.out.println(Store);public class Petstor
10、e extends StoreCat cat = new Cat();Petstore()System.out.println(Petstore);public static void main(String args) new Petstore();运行这段代码,它的执行结果如下:StoreAnimalCatPetstore从结果中可以看出,在创建一个Petstore类的实例时,首先调用了它的父类Store的构造方法;然后试图创建并初始化变量cat;在创建cat时,首先调用了Cat类的父类Animal的构造方法;其后才是Cat的构造方法主体,最后才是Petstore类的构造方法的主体。列2c
11、lass Animal Animal() System.out.println(Animal);class Cat extends AnimalCat() System.out.println(Cat);class Cat2 extends AnimalCat2() System.out.println(Cat2);class Store Cat2 cat=new Cat2();Store() System.out.println(Store);public class Petstore extends StoreCat cat = new Cat();Petstore() System.ou
12、t.println(Petstore);public static void main(String args) new Petstore();运行这段代码,它的执行结果如下: AnimalCat2StoreAnimalCatPetstore这例1和例2,使我更了解了类的构造过程:类在new实例的时候a。第一步构造类的成员变量 这里需要注意的: a)即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造函数)被调用之前得到初始化 b)初始化的顺序是先“静态”对象(初始化过后,静态对象不会再被初始化),而后是“非静态”对象。 第二步调用构造方法。b。如果有父类,那么就是先构造父类的成员变
13、量,然后再调用父类的构造方法,然后再a。-this用法java中的this随处可见,用法也多,现在整理有几点:1. this是指当前对象自己。 当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中: public class HelloString s = Hello; public Hello(String s) System.out.println(s = + s); System.out.println(1 - this.s = + this.s); this.s = s; System.out.println(2 - this.s = + this
14、.s); public static void main(String args) Hello x=new Hello(HelloWorld!); 运行结果:s = HelloWorld! 1 - this.s = Hello 2 - this.s = HelloWorld! 在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用 class A public A() new B(this).print(); public void print() System.out.
15、println(Hello from A!); class B A a; public B(A a) this.a = a; public void print() a.print(); System.out.println(Hello from B!); public class Cpublic static void main(String args) A x=new A();运行结果: Hello from A! Hello from B! 在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。2。在构造函数中,通过this可以调用同一c
16、lass中别的构造函数,如class Flower Flower (int pig) System.out.println(pig:+ pig ); Flower(String ss) ss=string; System.out.println(ss:+ ss); Flower(int pig, String ss) this(pig); System.out.println(pigpig+ pig); public class Zxpublic static void main(String args) Flower a=new Flower(7,java);运行结果:pig:7;pigpi
17、g:7;值得注意的是:1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。2:不能在构造函数以外的任何函数内调用构造函数。 -static 1. 调用静态方法时,不需要产生对象.因为静态方法属于类本身,而不属于对象. 调用时: 类名.静态方法名() 就可以2. class Point int x; static int y; /定义了1个静态变量 static void output() System.out.println(out); public static void main(String args) Point.output(); /调用静态方法 Point pt1=new
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java_ 面向 对象 封装 继承 多态
限制150内