好文档 - 专业文书写作范文服务资料分享网站

类的封装继承与多态

天下 分享 时间: 加入收藏 我要投稿 点赞

Java程序设计入门与精通

第七章

类的封装、继承与多态

教学提示:封装、继承与多态是面向对象程序设计的三个核心特性。封装是面向对象技

术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想。继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入的程序开发。而多态允许以一种统一的风格处理已存在的变量和相关的类,多态性使得向系统增加功能变得容易。

教学目标:理解封装、继承和多态的概念。了解如何在应用程序的开发中利用这些思想简化程序的开发。

7.1 封装

7.1.1 封装的概念

封装的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共变量和公共方法,而看不见方法的具体实现细节,也不能对类中非公共的数据进行操作。这样可以防止外部的干扰和误用。

封装的目的在于将对象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只须用设计者提供的接口来访问对象。同时减少了程序各部分之间的依赖性,降低了程序的复杂性,由于隐藏了其内部信息的细节,使内部信息不易受到破坏,安全性有了保证,同时也为外界访问提供了简单方便的界面。

7.1.2 封装的实现

Java定义了4种访问权限:公有的(public)、保护的(protected)、私有的(private)和默认的。

1.公有的(public)

用public修饰的类成员(包括变量和方法)称为公有的,公有成员允许Java系统中所有的类访问,即不仅允许类内部的成员访问,也允许同一个包或不同包中的类直接访问。外界可以直接存取公有数据,调用公有方法。

113

第七章 类的封装、继承与多态

【例7-1】 成员变量说明为公有 //file name:Demo1.java class p1 { public int x; //定义公有变量 public void set_x(int i) { x=i; } public void show_x() //定义公有方法 { System.out.println(\ } }

class Demo1 { public static void main(String args[]) { p1 obj=new p1();

obj.set_x(3); //通过调用类的公有方法给公有变量赋值 obj.show_x(); //通过调用类的公有方法显示公有变量的值 obj.x=18; //直接给obj对象的公有变量赋值 System.out.println(\ //直接输出公有变量的值 } }

程序输出结果如图7-1所示:

图7-1 程序运行结果

2.私有的(private)

用private修饰的类成员称为私有的,类的私有成员只能被这个类的方法直接访问。如果在例7-1中将x声明为私有的,则会出现编译错误,即obj.x=18这个语句出错,因为私有变量不能在类外直接访问,只能通过obj对象的公有方法访问x。

一般把不需要外界知道的数据说明为私有,这样有利于数据的安全性,也符合程序设计中隐藏内部信息处理细节的原则。

3.被保护的(protected)

用protected修饰的类成员成为被保护的。类的被保护成员允许其归属的类、由此类派生的子类以及同一个包中的其他类访问。

如果一个类有派生子类,为了使子类能够直接访问父类的成员,则把这些成员(大部分是

114

Java程序设计入门与精通

数据)说明为被保护的。

【例7-2】 访问类的被保护成员 //file name:MyDemoClass.java class ParentClass { protected int n=3;

protected void show_n() { System.out.println(\ } }

class MyDemoClass extends ParentClass { public static void main(String args[]) { MyClass obj=new MyClass();

obj.show_n(); //在MyClass类中直接访问父类中被保护的方法 obj.n=18; //直接访问父类中被保护的数据 obj.show_n(); } }

程序的运行结果如图7-2所示:

图7-2 程序运行结果

4.默认的

如果类成员前面没有任何关键字修饰,则称为默认的。默认的类成员除了允许被其归属的类访问外,还允许同一个包中的其他类访问。若两个类不在同一个包中,即使是这个类的子类,也不允许访问这个类的默认成员。

如果将例7-1中的变量x前面的public关键字去掉,则成为默认类型的变量,程序运行结果不变。如果将例7-2中的变量x前面的protected关键字去掉,则运行结果同样不变。

对类成员的4种访问权限总结在表7-1中。

表7-1 类成员的访问权限 public protected 默认的

同一个类 √ √ √ 同一个包 √ √ √ 不同包中的子类 √ √ 其他包 √ 115

第七章 类的封装、继承与多态

private √ 7.2 继承

7.2.1 继承的概念

继承是一种由已有类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类。新类继承一般类的状态和行为,并根据需要增加它自己的状态和行为。

从现有类出发定义一个新类,称为新类继承了现有的类,其中被继承的现有类叫做超类(superclass)或父类,由继承而得到的类称为子类(subclass)。

例如,当类sub1继承类super时,就表明sub1是super的子类,即super是sub1的超类(父类)。子类从超类继承变量和方法,从而可以共享数据和方法。sub1类由两部分组成:继承部分和增加部分。继承部分是从super继承过来的,把super的成员映射成sub1的继承成员;增加部分是专为sub1编写的代码,如图7-3所示。

Super超类 Sub1子类 继承super部分 sub1增加部分 Sub2子类

继承super部分 sub2增加部分 图7-3 继承性

在Java中规定,一个父类可以同时拥有多个子类,但一个子类只能有一个父类,即单重继承,而且允许多层继承,即子类还可以有它自己的子类,在下一层的继承关系中原先的子类就变成了父类。这样的继承关系就形成了继承树。

7.2.2 类继承的实现

类继承用关键字extends实现,格式为: class 子类名extends 父类名 {子类的类体}

如果没有extends子句,则这个类直接继承Object。 【例7-3】 类继承和传递性

设计思路:设计三个类A、B、C,A类中定义多个成员变量和方法,B类继承A类,C

116

Java程序设计入门与精通

类继承B类,并且在B类中增加新的成员变量,在C类中增加新的成员变量。分别创建三个类的对象,在B、C类对象中访问父类的成员变量,观察继承的传递性。

代码://file name: MyClass.java class A { int a1=1;

public int a2=2; protected int a3=3; private int a4=4; int geta4() { return a4;} }

class B extends A { int b=5; //添加新的数据成员b,同时B类还有从A类继承过来的数据成员 //a1,a2,a3和成员方法geta4() }

class C extends B {

int c=6; //添加新的数据成员c void change() //添加新的方法change() { a1+=10; a2+=10; a3+=10; b+=10; c+=10; } }

class MyClass {

public static void main(String args[]) {

A aa=new A();

System.out.println(\:\ B bb=new B(); System.out.println(\:\ +\ C cc=new C();

System.out.println(\:\ \ cc.change();

117

类的封装继承与多态

Java程序设计入门与精通第七章类的封装、继承与多态教学提示:封装、继承与多态是面向对象程序设计的三个核心特性。封装是面向对象技术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想。继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入
推荐度:
点击下载文档文档为doc格式
8xpdp9z7ru6k2tg1xudp48fsc2a7k200rkm
领取福利

微信扫码领取福利

微信扫码分享