Java面向对象编程思想.docx
《Java面向对象编程思想.docx》由会员分享,可在线阅读,更多相关《Java面向对象编程思想.docx(21页珍藏版)》请在三一办公上搜索。
1、Java面向对象编程思想一:Java面向对象的编程思想: 1. Java具有面向对象的三大特征: 封装:通过java的类来实现数据和操作方法的封装,对外界可以将每一个Java类都视为一个黑箱,只需要调用该黑箱提供的方法即可完成你想要的操作。 继承:通过类的继承,便于将统一的功能集中在父类中,实现代码的重用和可维护性 多态:通过重载、重写与覆盖,实现不同类的不同形态特征。 以上这三大特征是通过具体的类、抽象类与接口技术来体现的。 2. 把封装的类进行实例化,可以生成多个对象,这些对象通过消息传递来进行交互(消息传递即激活指定的某个对象的方法,以改变其状态或让它产生一定的行为),最终完成复杂的任务
2、。 3. 一个类的使用过程,包括封装类,生成实例、使用实例进行三个操作3个过程。 4. 一个类就是变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。 5. 封装的类不是对象,要使用该封装的类进行操作,必须先生成这个类的一个实例-对象。对象的生成包括声明、实例化和初始化3个方面的内容。通常的格式为: ClassName objectName=new ClassName(paramlist); ClassName 声明了一个类型为ClassName的对象。其中ClassName是组合类型(包括类和接口)。对象的声明并不为对象分配内存空间。 运算符new 为对象分配内存空间,实
3、例化一个对象。new 调用对象的构造方法,返回对该对象的一个引用(即该对象所在的内存地址)。用new可以为一个类实例化多个不同的对象。这些对象占用不同的内存空间,因此改变其中一个对象的状态不会影响到其他对象的状态。 生成对象的最后一步是执行构造方法,进行初始化。由于对构造方法可以进行重写,所以通过对给出不同个数或者类型的参数会分别调用不同的构造方法 new 运算符返回对一个对象的应用,但与,C,C+中的指针不同,对象的引用是指向一个中间的数据结构,它存储有关数据类型的信息及当前对象所在堆的地址,而对于对象所在实际的内存地址是不可操作的,这就保证了安全性。 对于具有共同属性,又有自己特点的对象,
4、就不能够通过单一的封装来实现了。此时可以通过继承来实现。通过父类和子类,实现了类的层次,可以从最一般的开始,逐步特殊化,定义一系列子类。同时,通过继承也实现了代码的复用,是程序的复杂性线性增长,而不是呈几何增长。 继承是面向对象的基石,因为他允许创建分等级层次的类。运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性。该类可以被具体的类继承,每个具体的类都增加一些自己的特有的东西。在Java术语中,被继承的类叫做超类(supperclass),继承超类的类叫做子类(subclass)。因此,子类是超类的一个专用版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特元素。
5、 继承是使用已经存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性的继承父类。 尽管子类包括超类所有的成员,但它不能访问超类中被声明为private的成员。只能被它自己类中的其他成员访问,子类没有方法访问。 父类和子类的相互转换:在Java中可以将子类的引用赋给父类的对象,那么这时子类中那些不是从父类继承来的成员将不再可见,我们可以再通过强制类型转换将这个父类再转换成子类类型,那些成员又变得可见了,由此可见,将子类引用赋给父类对象时,Java6. 7. 8. 9. 虚拟机并没有将那些非继承成员丢弃。例如: Bus bus=new Bus
6、; Car car=bus; System.out.println(car.p);在编译时将产生错误,在car中p是不可见的。 下面将得到正确的结果,子类非继承域又可访问,没有被丢弃。 Bus bus2=(Bus)car; System.out.println(bus2.z); 10. 使用this和supper Java拥有两个保留关键字this和supper,这两个关键字在继承的子类中使用。 this: 引用当前类的变量和方法。可以防止父类中也有相同的变量或者方法造成错乱。 super : 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或者函数,基类与派生类中有
7、相同成员定义时) 另外还有两种用法: this(参数)引用当前类的构造函数。格式如下: this(实参) 类似的super调用基类中的某一个构造函数 11. 在子类的构造函数中,如果我们不显示的调用super完成父类的构造,系统会自动调用父类的构造函数,但是这样存在很多的问题。如果在父类的构造函数中我们自己定义了构造函数,那么系统提供给我们不带参数且函数体只是一对大括号的构造函数将被收回,这时在子类的构造函数中,如果我们不显式指定哪一个supper,就会默认那个不带参数的父类构造函数,而如果我们自己定义的父类构造函数又全是不需要参数的话,就会产生编译错误 12. 在实现了类的继承后,子类就拥有
8、了父类可见的变量和方法,就可以引用这些变量和方法了。但是,同时子类也可以有同父类同名的变量和方法,在同一个类的内部,也可以拥有同名的、参数列表不同的方法,这就是多态,即同一个名字有多种实现状态。 Java多态是通过方法重写和方法的重载来实现的。 (1).覆盖:继承了父类的同名无参函数 当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,称为覆盖(注意返回值类型也必须相同,否则编译出错)。 (2).重载:继承了父类的同名有参函数 当子类继承了父类的一个同名函数,且方法不同,则称为重载。通过方法重载,子类可以重新实现父类的方法,使其具有自己的特征。 (3)重
9、写:当前类的同名方法 通过方法重写,一个类中可以有多个具有相同名字的方法,由传递他们的不同参数个数和类型的参数来决定使用哪种方法。因此,重写的名称是当前类中的同名函数,不是父类中的函数名。 由以上可以知道,只有覆盖和重载是针对父类的,而重写是针对当前类的。 注意:对于方法的访问限制修饰词,子类方法要比父类的访问权限更高,例如父类为public ,那么子类为private则出现错误。子类抛出的异常应该是父类抛出异常或其子类。 13. 在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来却不是这样的,不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的
10、类就是抽象类。抽象类往往用来表示我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 14. 抽象类可以有自己的数据成员,也可以有非abstract得成员方法,也可以由抽象方法,抽象方法只有函数定义部分,没有函数体,函数的具体实现要在子类中编写。 15. 抽象类的继承:抽象类是一种特殊的类,必须通过继承才能够使用,继承的方法与普通的类没有什么区别使用extends关键字,不同的是,它必须实现所有的abstract方法。 16. 不能被继承的类-最终类(final) 在设计类时,如果这个类不需要子类,类的实现细节不允许改变,并确信这个类不会被再扩
11、展,那么就设计为final类。Final类不被继承,因此final 类的成员方法没有机会被覆盖,默认都是final 的。 (1) final类不能被继承,没有子类,final类中的方法默认是final的。 (2) final方法不能被子类的方法覆盖,但可以被继承。 (3) final 成员变量表示常量,只能被赋值一次,赋值后值不能再改变 (4) final 不能修饰构造方法 (5) 另外注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的 (6) 使用final方法的原因有两个: 把方法锁定,防止任何继承类修改它的意义和实现。 高效,编译
12、器在遇到调用final方法时会转入内嵌机制,大大提高执行效率 对于final static类型的成员变量,static 使得变量只存在一个副本,final使得它不能改变 (7).final成员只能被初始化一次。 Final成员必须在声明时或者在构造方法中被初始化,而不能在其他的地方被初始化。 17. 多重继承:Java中通过接口可以实现多重继承。使多个不相关的类可以具有相同的方法。 18. Java中的接口是一系列方法的声明,是一些方法特征的集合,接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。 19. 在Java语言规范中,一个方法
13、的特征仅包括方法的名字、参数的数目和类型,而不包括方法的返回类型、参数的名字及抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分超类型和子类型)的返回值类型和抛出的异常是否相同。 20. 接口继承和实现继承的规则不同,一个类只能有一个直接父类,但可以实现多个接口。 21. 接口的存在可以使Java中的对象向上转型为多个基类型,并且和抽象类一样可以防止他人创建该类的对象,因为接口不允许创建对象。 22. Interfa 关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。
14、接口的特性整理如下: (1).接口中的方法可以有参数列表和返回值类型,但不能有任何方法体 (2).接口中可以包含字段,但是会被隐式的声明为static和final (3).接口中的字段只是被存储在该接口的静态存储区内,而不属于该接口 (4).接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理 (5)实现一个接口时,需要将被定义的方法声明为public类型,否则为默认访问类型,Java编译器不允许这种情况 (6).如果没有实现接口中的所有方法,那么创建的仍然是一个接口 (7).扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements
15、. (8).要定义一个接口类,需要从以下几个方面入手: putlic interface 接口名 (9).Java接口的方法只能是抽象和公开的,Java接口不能有构造器。Java接口本身没有任何实现,因为接口不涉及表象,而只是表述public 行为,所以接口比Java抽象类更抽象化。 (10).Java接口可以是public 的静态的和final属性 (11).要使用一个接口,在定义一个类时,必须使用implements来申明接口类。 23.接口与抽象类的区别: Java接口和Java抽象类电表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增
16、加程序的可维护性、可扩展性,就必须是面向接口的编程、面向抽象的编程,正确的使用接口、抽象类这些有用的抽象类型作为结构层次上的顶层。 (1) 抽象类可以提供实现的方法,接口不能提供 Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这就是Java抽象类的唯一一个优点,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么所有的子类一下子就可以得到这个新方法。而Java接口做不到这一点,如果一个Java接口里加入了一个新方法,所有实现这个接口的类就无法成功的通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Ja
17、va接口的缺点。 (2).抽象类只能继承一个,而可以实现多个接口 一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现类处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。 总结:Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主的行为,而且具有其他次要行为。结合(1),(2)点中抽象类和Java接口的各自优势,最经典的设计模式出来了:声
18、明类型的工作仍然由Java接口承担,但是同时给出一个Java抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java接口在最上面,然后紧跟着抽象类,这就将两者的最大优点都发挥到极致了。这个模式就是默认适配模式。 实现代码如下: /定义接口方法 public interface ClassName public void func1;/定义接口方法 /定义实现抽象类 public abstract class ClassName2 public void func2/定义实现方法 /定义实现类 public
19、class ClassName3 extends ClassName2 implements ClassName1 public void func1/实现接口函数 func2;/调用抽象类函数 23. 如何选择接口和抽象类: 接口在某些地方和抽象类有相似的地方,但是采用哪种方式来声明类主要参考一下两点: (1).如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。 (2)如果知道某个类应该是基类,那么第一个选择的应该是让它成为接口,只有在必须要有方法定义和成员变量时,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类仍然是抽象
20、类。 24.静态类,内部类和匿名类是Java为我们提供的几个出色的工具。 a.避免创建类的实例,可以直接使用静态类 b.使相关的类都能够存在于同一个源代码文件中,这要归功于内部类 c.避免一个程序产生大量非常小的类,这要归功于匿名类 25.静态类、匿名类、内部类和异常类的概念和使用: a.Java静态类:静态方法,静态变量、静态代码块、静态内部类 b.Java匿名类:匿名类的定义、使用实例、处理swing事件 c.Java内部类:内部类的定义、使用实例、局部内部类、引用外部类对象 d.Java异常类:Java异常层次结构、捕捉处理机制、自定义异常。 二Java异常类: 1异常是程序中的一些错误
21、,但并不是所有的错误都是异常,并且错误有时候是可以避免的。例如代码中少了一个分号,那么运行出来结果提示错误java.lang.Error;如果用 System.out.println(1/0)那么是因为用0做了除数,会抛出java.lang.ArithmeticException的异常。 2.Java对异常处理是按异常匪类处理的,不同的异常有不同的分类,每种异常都对应一个类型(class)每个异常都对应一个异常对象。 3. 异常有两个来源:一是Java语言本身定义的一些基本异常类型;二是用户通过继承Exception类或者其子类自己定义的异常。 4.异常的对象有两个来源:一是Java运行时环境
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 编程 思想

链接地址:https://www.31ppt.com/p-3159810.html