当前位置:文档之家› 2015.6.17--java第七章继承和多态章总结

2015.6.17--java第七章继承和多态章总结

第七章继承和多态
1.继承的作用:
它是面向对象的三大特征之一,可以解决编程代码冗余的问题,是实现代码重用的重要手段之一。

继承是软件可重用性的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种表现或行为就称为继承。

这个时候新类称为子类,现有的类称为父类。

它最基本的作用就是:使得代码可重用,增加软件的可扩充性。

2.继承的语法:
[访问修饰符] class <SubClass> extends<SuperClass>;
a.通过extends实现继承subclass 是子类后者是父类。

b.如果访问修饰符是public,那么该类在整个项目可见。

不写访问修饰符,该类只在当前包可见。

c.子类可以从父类中继承,public和protected修饰的属性和方法,不论子类和父类是否在同一个包里。

d.子类还可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里。

E.子类无法继承父类的构造方法。

3.多重继承关系的初始化顺序:
父类属性>>父类构造方法>>子类属性>>子类构造方法。

4.实例化子类对象:
A.创建该类的对象。

B.创建该类的子类的对象。

C.子类在实例化时,会首先执行父类的构造方法,然后才执行子类的构造方法。

5.子类继承父类时,构造方法的调用规则如下:
a.如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统默认先调用父类的无参构造方法,在这种情况下是否写入super语句,效果是一样的。

b.如果子类的构造方法中通过super显式调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法。

c.如果子类的构造方法中通过this显式调用自身的其他构造
方法,在相应构造方法中应用以上两条规则。

注意:如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直执行到顶级父类object类的无参构造方法为止。

注意:在类没有提供任何构造方法时,系统会提供无参的方法体为空的默认构造方法,一旦提供了自定义构造方法,系统将不会提供这个默认的构造方法,如果要使用它,程序员必须手动添加。

6.object类
它是所有类的父类。

在java中所有的java类都直接或间接的继承了ng.object类。

在定义一个类时,没有使用extends关键字,也就是没有显式地继承某个类,那么这个直接继承object类,所有对象都继承这个类的方法。

Object类定义大量的可被继承的方法。

7.继承中的方法重写。

A.子类可以根据需求对从父类继承的方法进行重写,这称为方法的重写或方法的覆盖(overriding)。

B.如果子类从父类中继承的方法不能满足子类的需求,可以在子类中对父类的同名方法进行重写(覆盖)。

8.继承中方法重写的要求
a.重写方法与被重写方法必须具有相同的方法名(和方法重写一样)
b.重写方法与被重写方法必须具有相同的参数列表(不一样)
c.重写方法的返回值类型和被重写方法的返回值类型相同。

(不一样)
d.重写方法不能缩小被重写方法的访问权限。

e.在继承父类方法的基础上只能修改返回值类型和方法体内容。

9.重载(overloading)和重写(overriding)的区别。

A.重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关。

B.重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同。

10.多态
a.多态一词的通常含义是指能够呈现出多种不同的形式或形态。

在程序设计中,它意味着一个特定类型的变量可以引用不同类型的对象。

并且能够自动地调用引用的对象的方法。

也就是根据作用到的不同对象类型,响应不同的操作。

方法
重写是实现多态的基础。

b./*Dog dog =new Dog();
dog.toHospital();
Bird bird =new Bird();
bird.toHospital();*/
Pet pet;
pet=new Dog();
pet.toHospital();
pet=new Bird();
pet.toHospital();
这两段代码的执行结果一样(page179),虽然定义的是Pet 类,但是实际执行的时候是Pet子类的方法,这里的代码就体现了多态性。

多态意味着在一次方法调用中是根据包含的对象的实际类型(即实际的子类对象)来决定应该调用哪个方法。

而不是用来储存对象引用的变量的类型来决定的。

当调用一个方法时,为了得到多态的操作,这个方法即要是父类中声明过的,也必须是子类中重写过的方法。

11.向上转型
a.定义:子类到父类的转换成为向上转型。

将一个父类的引用指向一个子类对象,称为向上转型,自动
进行类型转换。

此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法。

此时同过父类引用变量无法调用子类特有的方法。

b.语法:<父类型><引用变量名>=new <子类型>();
int i=5;
double di=5;
把int型常量或变量的值赋值给double型变量,可以自动进行类型转换。

double d2=3.14;
int a=(int) d2;
把double型常量或变量的值赋值给int型变量,须进行强制转换。

实际上在引用数据类型的子类和父类之间也存在这类型转换问题。

如:
Pet pet=new Dog();子类到父类的转换
pet.toHospital();会调用Dog类的toHospital()方法,而不是Pet类的toHospital()方法体现了多态。

12.向下转型
A.定义:当向上转型发生后,将无法调用子类特有的方法。

但是如果需要调用子类特有的方法时,可以通过把父类在转换为子类来实现。

B.将一个指向子类对象的父类引用赋给一个子类的引用,即父类类型转换为子类类型,称为向下转型,此时必须进行强制类型转换。

C.语法:<子类型><子类引用变量>=(子类型)<父类引用变量>
Dog dog =(Dog) pet;
dog.catchingFlyDisc();Dog特有的接飞盘方法.
13.instanceof运算符
在向下转型的过程中,如果没有转化为真实子类类型,会出现类型转换异常。

Page181
Pet pet=new Dog();
pet.toHospital();
Bird bird=(Bird) pet;将pet转换为Bird类型会出错。

A.使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系。

否则会出现编译错误。

Instanceof通常和强制类型转换结合使用。

14.多态的应用。

A.可替换性:多态对已存在的代码具有可替换性。

B.可扩充性:增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作,实际上新增子类更容易获得多态功能。

C.借口性:多态是父类向子类提供类一个共同接口,由子类完善或
者覆盖来实现。

D.灵活性:多态在应用中体现了灵活多样的操作,提高了使用效率。

E.简化性:多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

15.使用父类作为方法的形参。

A.这个方法是java中实现和使用多态的主要方式。

(page182)
父类作为方法形参,所有子类对象都可以作为实参。

(chapter07.ketang03.pet)
16.使用父类作为方法返回值:
使用父类作为方法返回值也是java中实现和使用多态的主要形式。

Page183,(chapter07.ketang0)
掌握继承的优点和实现*****
掌握子类重写父类方法*****
掌握继承下构造方法的执行**********
掌握抽象类和抽象方法的使用*****
掌握final修饰属性、方法和类*****
多态:多种表现形态
多态;父类引用指向子类对象。

Person类型是person的编译类型。

Soldier类型是p的运行时类型。

1.转型
A.向上转型:子类类型转换成父类类型
B.向下转型instanceof:父类类型转换成子类类型,强转。

2.多态的使用
2.1父类作为方法形参
2.2父类作为方法返回值类型。

3.向下转型要转换成真实子类。

Instanceof前边放的是变量后边放的是一个类,可以判断变量是否属于这个类。

结果是布尔类型。

Instanceof的使用必须有继承关系。

相关主题