第六章 面向对象编程进阶.ppt
《第六章 面向对象编程进阶.ppt》由会员分享,可在线阅读,更多相关《第六章 面向对象编程进阶.ppt(108页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java语言程序设计安徽工业大学现代教育技术中心张小银 第六章 面向对象编程进阶 本章学习目标:1、包2、继承3、访问控制4、方法重写、重载5、多态性6、关键字super、static、final包为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重命名空间。package语句1)package语句作为Java源文件的第一条语句,批明了该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。2)语法格式:package pkg1.pkg2.pkg3;/3)用法举例:例 61 创建包package p1;public class Te
2、stpublic void display()System.out.println(in method display();编绎和生成包1)Java编绎器把包对应于文件系统的目录管理,package语句中,用”.”来指明包(目录)的层次;2)如果在程序Test.java中已定义了包pl,编绎时采用javac Test.java 则编绎器会在当前目录下生成Test.class文件,再在适合位置(destpath目录)手动创建一个名为pl的子目录 javac d destpath Test.java 则编绎器会自动在destpath目录下建立一个子目录pl,并将生成的.class文件都放到dest
3、path/pl下。import语句1)为使用定义在不同包中的Java类,需用import语句来引入所需要的类。2)语法格式:import pkg1.pkg2.(classname|*);3)用法举例:例 62 导入和使用有名包中的类 Test.java:package p1;public class Test public void m1()System.out.println(In class Test,method m1 is running!);TestPackage.java:import p1.Test;/或 import p1.*;public class TestPackage
4、public static void main(String args)Test t=new Test();t.m1();例 63 导入同一个包中的类 A.java:package mz;public class A public void ma()System.out.println(in class A);B.java:package mz;public class Bpublic void mb()A a=new A();a.ma();相关说明由于JDK的java.lang包中的类经常被用到,如String类、System类等,编绎器在编绎.java源文件时自动为我们引入了java.la
5、ng包,因此不必显示引入就可该包中的类,而要使用JDK其它包中的类,则必须使用import语句显示引入。参见例313和例57等。JDK类库中的类数目众多并以Java归档文件(后缀为.jar)形式存在,主要包括:”JDK_HOMElibdt.jar”、”JDK_HOMElibtools.jar”等。其中主要的Java系统类均包含在rt.jar文件中(可解压后查看其中包含的.class文件)。这些.jar文件在编绎和运行时被系统自动搜索,不必显式引入。Java包特性 1)一个类如果未声明为public的,则只能在其所在包中被使用,其它包中的类即使在源文件中使用import语句也无法引用它。2)可以
6、不在源文件开头使用import语句导入要使用的有名包中的类,而是在程序代码中每次用到该类时都给其完整的包层次,例如:public class TestPackage public static void main(String args)p1.Test t=new p1.Test();/每次用到时给出包层次 t.m1();例 64 使用打包的应用程序类 package p1;public class Test public static void main(String args)System.out.println(haha!);JDK中主要的包介绍继承(1)继承(Inheritance)是
7、面向对象编程的核心机制之一,其本质是在已有类型基础之上进行扩充或改造,得到新的数据类型,以满足新的需要。提高程序的复用性。根据需要定义Java类描述“人”和“学生”信息:public class Person public String name;public int age;public Date birthDate;public String getInfo()public class Student public String name;public int age;public Date birthDate;public String school;public String getI
8、nfo()通过继承,简化Student类的定义:public class Student extends Person public String school;继承(2)1)Java类声明语法格式:classextends 2)Object类是所有Java类的最高层父类,如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类。(单继承)public class Person 等价于:public class Person extends Object 继承(3)Java只支持单继承,不允许多重继承。一个子类只能有一个父类 一个父类可以派生出多个子类多重继承:是指一个
9、类可以同时继承多个直接父类,这可能导致子类成员在追溯上的不确定性。例 65 单独定义结构相近的Java类 Person.java:public class Personprivate String name;private int age;public void setName(String name)this.name=name;public String getName()return name;public void setAge(int age)this.age=age;public int getAge()return age;public String getInfo()retur
10、n Name:+name+tAge:+age;Student.java:public class Studentprivate String name;private int age;private String school;public void setName(String name)this.name=name;public String getName()return name;public void setAge(int age)this.age=age;public int getAge()return age;public void setSchool(String schoo
11、l)this.school=school;public String getSchool()return school;public String getInfo()return Name:+name+tAge:+age;例 66 通过继承创建新的Java类Person.java:public class Personprivate String name;private int age;public void setName(String name)this.name=name;public String getName()return name;public void setAge(int
12、 age)this.age=age;public int getAge()return age;public String getInfo()return Name:+name+tAge:+age;Student.java:public class Student extends Personprivate String school;public void setSchool(String school)this.school=school;public String getSchool()return school;Soldier.java:public class Soldier ext
13、ends Personprivate String type;/军兵种,如陆军/海军/空军等public void setType(String type)this.type=type;public String getType()return type;Test.java:public class Testpublic static void main(String args)Student s=new Student();s.setName(Tom);s.setAge(18);s.setSchool(THU);System.out.println(s.getInfo()+nSchool:+
14、s.getSchool();运行结果:Name:Tom Age:18School:THU类之间的关系(了解)1、依赖关系 依赖(Dependency)关系是指一个类的方法中使用到了另一个类的对象,称前者依赖后者。2、聚合关系 聚合(Aggregation)关系是指一个类的对象包含(通过属性引入)了另一个类的对象。3、泛化关系 泛化(Generalization)关系是指类之间的继承关系(如类和接口之间的实现关系,以及接口之间的继承关系)。访问控制1)访问控制是指对Java类或类中成员的操作进行限制,即规定其在多大的范围内可以被直接访问。以避免被滥用。2)类的访问控制 public的类可在任意场
15、合被引入和使用,而非public的类只能在其所在包中被使用。(private、protected不允许修饰顶级类)3)类中成员的访问控制应用举例:若上述两个类放在不同的包中,有两处是非法的。例 67 使用protected成员 A.java:package p1;public class Apublic int m=5;protected int n=6;B.java:package p2;import p1.A;public class B extends Apublic void mb()m=m+1;/合法,等价于 this.m=this.m+1;n=n*2;/合法,等价于 this.n=
16、this.n*2;public static void main(String args)B b=new B();b.m=7;/合法b.n=8;/合法A a=new A();a.m=9;/合法a.n=10;/非法 方法重写 1)什么是方法重写?在子类中可以根据需要对从父类中继承来的方法进行重新定义,此称方法重写(Override)或覆盖。2)语法规则:重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;重写方法不能使用比被重写方法更严格的访问权限;/不能更私有。重写方法不允许声明抛出比被重写方法范围更大的异常类型。例 68 方法重写Person.java:public class
17、 Person String name;int age;public String getInfo()return Name:+name+t+age:+age;Student.java:public class Student extends Person String school;public String getInfo()return Name:+name+tAge:+age+tSchool:+school;Test.java:public class Testpublic static void main(String args)Person p=new Person();p.nam
18、e=Tom;p.age=18;System.out.println(p.getInfo();Student s=new Student();s.name=Billy;s.age=34;s.school=THU;System.out.println(s.getInfo();运行结果:Name:Tom age:18Name:Billy Age:34 School:THU同名属性 例 6-9 使用同名属性 Test.java:class Personint age=5;public int getAge()return age;public int getInfo()return age;class
19、 Student extends Personint age=6;public int getAge()return age;public class Testpublic static void main(String args)Person p=new Person();System.out.println(p.getAge();/返回5Student s=new Student();System.out.println(s.age);/返回6System.out.println(s.getAge();/返回6System.out.println(s.getInfo();/返回5 从父类中
20、继承来关键字super在存在命名冲突(子类中存在方法重写或添加同名属性)的情况下,子类中的代码将自动使用子类中的同名属性或重写后的方法。可以在子类中使用关键字super引用父类中的成份:1)访问父类中定义的属性:super.2)调用父类中定义的成员方法:super.()3)子类构造方法中调用父类的构造方法(见后面)4)Super的追溯不仅于直接父类例 610 使用super引用父类成员 Test.java:class Animalprotected int i=1;/用于测试同名属性,无现实意义class Person extends Animalprotected int i=2;/用于测试
21、同名属性,无现实含义private String name=Tom;private int age=9;public String getInfo()return Name:+name+tAge:+age;public void testI()System.out.println(super.i);System.out.println(i);class Student extends Personprivate int i=3;private String school=THU;public String getInfo()/重写方法return super.getInfo()+tSchool
22、:+school;public void testI()/重写方法System.out.println(super.i);System.out.println(i);public class Testpublic static void main(String args)Person p=new Person();System.out.println(p.getInfo();p.testI();Student s=new Student();System.out.println(s.getInfo();s.testI();运行结果:Name:TomAge:912Name:TomAge:9Sch
23、ool:THU23多态性(1)1)多态在Java中,子类的对象可以替代父类的对象使用。2)Java引用变量与所引用对象间的类型匹配关系:一个对象只能属于一种确定的数据类型,该类型自对象创建直至销毁不能改变。一个引用类型变量可能引用(指向)多种不同类型的对象既可以引用其声明类型的对象,也可以引用其声明类型的子类的对象。Person p=new Student();/Student是Person的子类例 611 多态性使用举例1Person.java:public class Personprivate String name;private int age;public void setName
24、(String name)this.name=name;public String getName()return name;public void setAge(int age)this.age=age;public int getAge()return age;public String getInfo()return Name:+name+tAge:+age;Student.java:public class Student extends Personprivate String school;public void setSchool(String school)this.schoo
25、l=school;public String getSchool()return school;public String getInfo()/重写方法 return super.getInfo()+tSchool:+school;Test.java:import java.util.*;public class Testpublic static void main(String args)Person p=new Student();/p指向student类型的对象 System.out.println(p.getInfo();/调用student类型对象中的方法Object o=Hell
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 面向对象编程进阶 第六 面向 对象 编程 进阶
限制150内