第7课件 封装、继承和多态(4学时 19-22)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 中的每个类都有构造方法,用来初始化该类的一个对象。
•构造方法具有和类名相同的名称,而且不返回任何数据类型。
•重载经常用于构造方法。