《Java语言程序设计第四章.ppt》由会员分享,可在线阅读,更多相关《Java语言程序设计第四章.ppt(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java面向对象程序设计面向对象程序设计第第4章章 类的特性类的特性1本章主要内容本章主要内容l理解父类与子类的继承关系理解父类与子类的继承关系l理解继承中发生的方法重写理解继承中发生的方法重写l重写重写Object类的类的toString()方法方法l使用使用super关键字访问父类成员关键字访问父类成员l访问修饰符的权限访问修饰符的权限l理解抽象类理解抽象类l理解内部类理解内部类2继承现象继承现象父父 类类 子类子类 父类父类/子类是子类是相对的相对的牛牛类狮子狮子类老虎类老虎类动物类动物类食肉动物类食肉动物类食草动物类食草动物类羊羊类3类的继承关系类的继承关系哺乳动物类哺乳动物类(父类父
2、类)公共属性和方法公共属性和方法私有属性和方法私有属性和方法狗类狗类(子类子类)继承属性继承属性继承方法继承方法新属性新属性新方法新方法猫类猫类(子类子类)继承属性继承属性继承方法继承方法新属性新属性新方法新方法老虎类老虎类(子类子类)继承属性继承属性继承方法继承方法新属性新属性新方法新方法演示继承4类的继承关系类的继承关系Mammal类类属性:属性:legsNumber、height、weight、color方法:方法:breed()等等Dog类类 属性:属性:legNumber等、等、hasTail方法:方法:breed()等、等、keepHouse()等等Cat类类 属性:属性:legN
3、umber等等方法:方法:breed()等、等、climb()等等5继承的概念继承的概念l继承是体现了类与类之间的关系,在现有类的基础上继承是体现了类与类之间的关系,在现有类的基础上建立新类的处理过程称为继承。建立新类的处理过程称为继承。l直接或间接被继承的类都是父类,子类继承父类的属直接或间接被继承的类都是父类,子类继承父类的属性和行为。父类也称超类或基类,子类也称派生类。性和行为。父类也称超类或基类,子类也称派生类。l子类复用父类的代码,同时也允许子类增加自己特有子类复用父类的代码,同时也允许子类增加自己特有的属性和方法。这样使得程序结构的设计更加清晰,的属性和方法。这样使得程序结构的设计
4、更加清晰,达到既减少程序的编码量,同时降低程序维护的工作达到既减少程序的编码量,同时降低程序维护的工作量。量。l父类的私有属性与方法不传递给子类。父类的私有属性与方法不传递给子类。lJava不允许出现多重继承。不允许出现多重继承。6方法重写方法重写l方法重写(方法重写(overriding)是指在子类中存在与父)是指在子类中存在与父类完全相同的方法,则发生方法的覆盖,即子类完全相同的方法,则发生方法的覆盖,即子类可以改写父类方法所实现的功能。类可以改写父类方法所实现的功能。l自然界中,同一种行为具有不同实现方式的现自然界中,同一种行为具有不同实现方式的现象很多。如:石墨与金刚石。象很多。如:石
5、墨与金刚石。演示方法重写7方法重写方法重写l发生在父类与子类中发生在父类与子类中l方法名称相同方法名称相同l参数列表相同参数列表相同l返回类型相同返回类型相同l方法实现不同方法实现不同l方法访问权限不能缩小,如:父类中被重写的方法访问权限不能缩小,如:父类中被重写的方法访问权限为方法访问权限为public,子类重写方法时不能,子类重写方法时不能缩小为缩小为private、protected或默认。或默认。l子类重写方法不能抛出新的异常。子类重写方法不能抛出新的异常。8Object类类 一切类的父类一切类的父类lObject类存在与类存在与java.lang包中,因此当定义一包中,因此当定义一个
6、新类而不指明其父类时,该类默认继承个新类而不指明其父类时,该类默认继承Object类。类。lObject类常用方法:类常用方法:boolean equals(Object obj):指示其他某个对象是:指示其他某个对象是否与此对象否与此对象“相等相等”。String toString():返回该对象的字符串表示。:返回该对象的字符串表示。l 定义实体类时,通常要重写上述两个方法。定义实体类时,通常要重写上述两个方法。演示重写Object类的方法9继承中发生方法重写对构造方法的影响继承中发生方法重写对构造方法的影响l每个类都会有自己的构造方法,即使没有显示每个类都会有自己的构造方法,即使没有显示
7、定义,系统也会提供一个默认的无参构造方法。定义,系统也会提供一个默认的无参构造方法。l构造方法名称与类名同名,因此父类与子类的构造方法名称与类名同名,因此父类与子类的构造方法名称必然不同,不会发生方法重写。构造方法名称必然不同,不会发生方法重写。演示继承时的构造方法10super关键字关键字l执行创建一个子类实例时,执行创建一个子类实例时,Cat cat=new Cat();l首先,调用执行父类的无参构造方法;然后调用首先,调用执行父类的无参构造方法;然后调用执行子类的无参构造方法。原因是子类构造方法执行子类的无参构造方法。原因是子类构造方法隐式了第一句代码隐式了第一句代码super(),即:
8、,即:public Cat()super();/运行子类的构造方法之前首先调用父类的构造方法运行子类的构造方法之前首先调用父类的构造方法lsuper 关键字始终指向当前类的父类,可以使用关键字始终指向当前类的父类,可以使用该关键字显式调用父类的有参构造方法或成员方该关键字显式调用父类的有参构造方法或成员方法。法。演示继承时的构造方法11访问修饰符的权限访问修饰符的权限lprivate:访问权限仅限于类内。:访问权限仅限于类内。lpublic:对外完全公开。:对外完全公开。lprotected:同包或异包子类可以访问。:同包或异包子类可以访问。l无修饰符:限于同包能访问。无修饰符:限于同包能访问
9、。演示无修饰符和protected12成员内部类成员内部类l构造一个内部类对象必须先构造一个外部类对构造一个内部类对象必须先构造一个外部类对象,然后通过外部类对象的引用象,然后通过外部类对象的引用“.new”构造构造内部类对象。示例如下:内部类对象。示例如下:Outer outer=new Outer();Outer.Inner in=outer.new Inner();l在内部类中可以访问外部类的成员变量:在内部类中可以访问外部类的成员变量:Outer.this.name l成员内部类中不能有静态的变量。成员内部类中不能有静态的变量。演示成员内部类13局部内部类局部内部类l定义在外部类方法中
10、的内部类称为局部内部类定义在外部类方法中的内部类称为局部内部类,不能使用访问修饰符。但是可以使用不能使用访问修饰符。但是可以使用abstract和和final修饰符修饰符l局部内部类的范围是在该方法内部。局部内部类的范围是在该方法内部。l可以访问外部类的属性;还可以访问外部类的可以访问外部类的属性;还可以访问外部类的有效的局部变量,但是要求这个局部变量必须有效的局部变量,但是要求这个局部变量必须是是final的。的。演示局部内部类14内部类的作用内部类的作用l内部类可以访问外部类的私有内部类可以访问外部类的私有(private)成员。成员。l接口是公开的,把接口的实现类作为内部类隐接口是公开的
11、,把接口的实现类作为内部类隐藏起来,强制用户通过接口来访问接口的实现藏起来,强制用户通过接口来访问接口的实现类,强制达到弱耦合性。类,强制达到弱耦合性。l配合接口实现多继承,这是使用内部类的主要配合接口实现多继承,这是使用内部类的主要原因。原因。15匿名内部类匿名内部类l匿名内部类是一种特殊的局部内部类。匿名内部类是一种特殊的局部内部类。l用来继承一个类或者实现一个接口,而且只会用来继承一个类或者实现一个接口,而且只会创建这个内部类的一个对象。创建这个内部类的一个对象。l可以出现在方法的返回类型中,也可以出现在可以出现在方法的返回类型中,也可以出现在方法的参数中。方法的参数中。l不能定义构造方法。不能定义构造方法。演示匿名内部类16本节小结本节小结l理解父类与子类的继承关系理解父类与子类的继承关系l理解继承中发生的方法重写理解继承中发生的方法重写l重写重写Object类的类的toString()方法方法l使用使用super关键字访问父类成员关键字访问父类成员l访问修饰符的权限访问修饰符的权限l理解抽象类理解抽象类l理解内部类理解内部类17
限制150内