面向对象程序设计思想5多态性修改.docx
- 文档编号:23409508
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:16
- 大小:15.53KB
面向对象程序设计思想5多态性修改.docx
《面向对象程序设计思想5多态性修改.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计思想5多态性修改.docx(16页珍藏版)》请在冰豆网上搜索。
面向对象程序设计思想5多态性修改
第七讲面向对象程序设计思想(5)
——多态性
引子1
classFather
{
}
classSon1extendsFather
{
publicvoidF1()
{
System.out.println("Son1");
}
}
classSon2extendsFather
{
publicvoidF1()
{
System.out.println("Son1");
}
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf1=newSon1();
f1.F1();-----编译发生错误
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
编译时f1.F1()、f2.F1()错误
结论1:
非静态方法编译时按引用类型确定
引子2
classFather
{
publicvoidF1()
{
System.out.println("Father");
}
}
classSon1extendsFather
{
publicvoidF1()
{
System.out.println("Son1");
}
}
classSon2extendsFather
{
publicvoidF1()
{
System.out.println("Son2");
}
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf0=newFather();
f0.F1();
Fatherf1=newSon1();
f1.F1();
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
输出:
Father
Son1
Son2
Son1
Son2
结论2:
非静态方法运行时按实例类型确定
引子3
classFather
{
publicstaticvoidF()
{
System.out.println("Father");
}
publicvoidF1()
{
F();
}
}
classSon1extendsFather
{
publicstaticvoidF()
{
System.out.println("Son1");
}
}
classSon2extendsFather
{
publicstaticvoidF()
{
System.out.println("Son2");
}
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf0=newFather();
f0.F1();
Fatherf1=newSon1();
f1.F1();
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
输出:
Father
Father
Father
Father
Father
引子4
classFather
{
publicstaticvoidF()
{
System.out.println("Father");
}
publicvoidF1()
{
F();
}
}
classSon1extendsFather
{
publicstaticvoidF()
{
System.out.println("Son1");
}
publicvoidF1()
{
F();
}
}
classSon2extendsFather
{
publicstaticvoidF()
{
System.out.println("Son2");
}
publicvoidF1()
{
F();
}
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf0=newFather();
f0.F1();
Fatherf1=newSon1();
f1.F1();
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
输出:
Father
Son1
Son2
Son1
Son2
结论3:
静态方法按静态方法所在类的类型确定
引子5
classFather
{
}
classSon1extendsFather
{
publicinti=2;
}
classSon2extendsFather
{
publicinti=3;
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf1=newSon1();
System.out.println(f1.i);
Fatherf2=newSon2();
System.out.println(f2.i);
Son1s1=newSon1();
System.out.println(s1.i);
Son2s2=newSon2();
System.out.println(s2.i);
}
}
编译时错误
结论4:
非静态属性编译时按引用类型确定
引子6
classFather
{
publicinti=1;
}
classSon1extendsFather
{
publicinti=2;
}
classSon2extendsFather
{
publicinti=3;
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf1=newSon1();
System.out.println(f1.i);
Fatherf2=newSon2();
System.out.println(f2.i);
Son1s1=newSon1();
System.out.println(s1.i);
Son2s2=newSon2();
System.out.println(s2.i);
}
}
输出:
1
1
2
3
结论5:
非静态属性运行时按引用类型确定
引子7
classFather
{
privateinti=1;
publicvoidF1()
{
System.out.println(i);
}
}
classSon1extendsFather
{
}
classSon2extendsFather
{
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf1=newSon1();
f1.F1();
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
输出:
1
1
1
1
引子8
classFather
{
privateinti=1;
publicvoidF1()
{
System.out.println(i);
}
}
classSon1extendsFather
{
privateinti=2;
}
classSon2extendsFather
{
privateinti=3;
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf1=newSon1();
f1.F1();
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
输出:
1
1
1
1
引子9
classFather
{
privateinti=1;
publicvoidF1()
{
System.out.println(i);
}
}
classSon1extendsFather
{
privateinti=2;
publicvoidF1()
{
System.out.println(i);
}
}
classSon2extendsFather
{
privateinti=3;
publicvoidF1()
{
System.out.println(i);
}
}
classProgram
{
publicstaticvoidmain(String[]args)
{
Fatherf1=newSon1();
f1.F1();
Fatherf2=newSon2();
f2.F1();
Son1s1=newSon1();
s1.F1();
Son2s2=newSon2();
s2.F1();
}
}
输出:
2
3
2
3
7.1多态性
非静态方法编译时按引用类型确定,运行时按实例类型确定。
静态方法按类名确定。
(如果程序中没有明显标出类名,建议看程序时加上)
非静态属性编译、运行时按引用类型确定。
静态属性按类名确定。
(如果程序中没有明显标出类名,建议看程序时加上)
例7.1
class测试学生
{
publicstaticvoidmain(String[]args)
{
考查课类.优秀=95;
考查课类.良好=85;
考查课类.中等=75;
考查课类.及格=65;
考查课类.不及格=50;
课程类kc1=new考查课类("体育","良好",2.0);
课程类kc2=new考试课类("语文",92.0,4.0);
System.out.println(kc1.转换成绩());
System.out.println(kc2.转换成绩());
}
}
7.2上机练习
1、定义一个抽象的“数”类,包括一个“显示”方法
2、定义一个运算接口,包括加法、减法
2、定义一个复数类,继承自数类,并包括实部和虚部,并实现运算接口
3、定义一个分数类,继承自数类,并包括分子和分母,并实现运算接口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 思想 多态性 修改