第7课件 封装、继承和多态(4学时 19-22)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七讲义面向对象——类

几种设计模式:

1. 当创建一个对象,若不想让对象的内容(私有成员变量)发生变化,则需要满足以下条件

(1) 所有数据域都是私有的;(2)没有修改方法setMethod;(3)没有一个访问器方法会返回一个指向可变数据域的引用。不可变类/对象例如:String类

2. 为了防止用户创建某个类的对象,则应该定义该类的私有构造方法。例如:Math类

3. 当只允许某个类只能创建一个实例时,称为单例模式。

一、类的封装

方法的抽象;类的抽象;(将方法的实现和使用分开| 将类的实现和使用分开)

类的用户&类的开发者

二、类的继承和多态(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 中的每个类都有构造方法,用来初始化该类的一个对象。

•构造方法具有和类名相同的名称,而且不返回任何数据类型。

•重载经常用于构造方法。

相关文档
最新文档