第7义 封装、继承和多态(4学时 19-22).doc_第1页
第7义 封装、继承和多态(4学时 19-22).doc_第2页
第7义 封装、继承和多态(4学时 19-22).doc_第3页
第7义 封装、继承和多态(4学时 19-22).doc_第4页
第7义 封装、继承和多态(4学时 19-22).doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七讲义 面向对象类几种设计模式:1. 当创建一个对象,若不想让对象的内容(私有成员变量)发生变化,则需要满足以下条件 (1) 所有数据域都是私有的;(2)没有修改方法setMethod;(3)没有一个访问器方法会返回一个指向可变数据域的引用。不可变类/对象例如:String类2. 为了防止用户创建某个类的对象,则应该定义该类的私有构造方法。 例如:Math类3. 当只允许某个类只能创建一个实例时,称为单例模式。1、 类的封装方法的抽象;类的抽象;(将方法的实现和使用分开| 将类的实现和使用分开)类的用户&类的开发者2、 类的继承和多态(2个学时)继承是java在软件重用方面最重要的特征。能有效避免代码冗余,使系统易于理解和维护、子类继承于父类,UML图表示,次类超类,或 继承类基类。当子类继承父类的时候,子类可以继承父类的所有成员跟方法,继承下来不代表可以访问,要访问得看访问控制规则。私有属性也可以继承,不过根据访问控制规则,私有属性虽继承下来却不可以访问的,只有通过public的方法访问继承下来的私有属性。B继承A类,C继承B类。A类中的私有属性,到了C会怎么样,能继承、访问吗?答案是:如果A中的属性有增加setget方法,可以访问的。举例public class A private int a; public int getA() return a; public void setA(int a) this.a=a; public class B extends A private int b; public int getB() return b; public void setB(int b) this.b = b; public class C extends B private int c; public int getC() return c; public void setC(int c) this.c = c; 那么当C c1=new C()时。c1可以使用setA()getA()访问控制从A类中继承来的私有属性a;由于构造方法是用来构造类的实例,它不同于属性和方法,其子类是不继承父类的构造方法,只能通过super从子类构造方法中调用。构造方法可以调用重载的构造方法或其父类的构造方法(必须作为第一条语句),若没有显式调用它们任何一个,则编译器会把super();作为构造方法的第一条语句,调用父类无参构造方法.若想override一个方法,则需要使用与其父类方法相同的签名.另外实例方法只有当其是可见的时候,才能被覆盖。静态方法与实例方法一样可以继承,但静态方法不能被覆盖,若父类定义的方法在子类中定义了,则父类中的静态方法被隐藏。Java中所有的类都直接或间接继承于Object。若没有显式指定父类,则缺省Object父类覆盖override同重载overload的区别:Java语言的extends是不支持多重继承的,其多重继承是通过interface来实现的。是不支持举例:构造方法链举例:父类 子类继承了父类的。举例:父类和子类的访问权限关系思考:对于父类的私有成员,子类是否已经继承,或者是否只能继承父类的可视成员?子类可以覆盖父类的protected方法,并把它的可见性改为public,但子类不能削弱谷类中定义的方法的可访问性。关键字this :指向调用对象本身的引用名关键字super:指向该类的父类的Java面向对象 关键字成员变量限定词的含义: static: 静态变量(类变量) final: 常量;transient: 暂时性变量,用于对象存档,用于对象的串行化 volatile: 贡献变量,用于并发线程的共享方法的实现也包括两部分内容:方法声明和方法体。方法声明方法声明中的限定词的含义: static: 类方法,可通过类名直接调用 abstract: 抽象方法,没有方法体 final: 方法不能被重写 native: 集成其它语言的代码 synchronized: 控制多个并发线程的访问方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。对于简单数据类型来说,java实现的是值传递,方法接收参数的值,但不能改变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。方法体方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。为了区别参数和类的成员变量,我们必须使用this。this用在一个方法中引用当前对象,它的值是调用该方法的对象。返回值须与返回类型一致,或者完全相同,或是其子类。当返回类型是接口时,返回值必须实现该接口。构造方法 构造方法是一个特殊的方法。Java 中的每个类都有构造方法,用来初始化该类的一个对象。 构造方法具有和类名相同的名称,而且不返回任何数据类型。 重载经常用于构造方法。 构造方法只能由new运算符调用封装封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。 private:类中限定为private的成员,只能被这个类本身访问。如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。 default:类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。 protected:类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。 public:类中限定为public的成员,可以被所有的类访问。继承子类的对象拥有父类的全部属性与方法,称作子类对父类的继承。 Java中父类可以拥有多个子类,但是子类只能继承一个父类,称为单继承。 继承实现了代码的复用。 Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。 子类不能继承父类中访问权限为private的成员变量和方法。 子类可以重写父类的方法,即命名与父类同名的成员变量。Java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。super 的使用有三种情况: 访问父类被隐藏的成员变量,如:super.variable; 调用父类中被重写的方法,如:super.Method(paramlist),super()调用父类构造方法; 调用父类的构造函数,如:super(paramlist);多态对象的多态性是指在父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各个子类中具有不同的语义。例如:几何图形的绘图方法,椭圆和多边形都是几何图的子类,其绘图方法功能不同。Java的多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。 编译时多态:在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。 运行时多态:由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。重载(Overloading) 方法重载是让类以统一的方式处理不同数据类型的手段。 一个类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。 返回值类型可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论