1.开发平台:Eclipse
2.开发语言: java语言
二.理论依据
1.什么是继承
生活中:父母与子女、有包含关系的(如圆桌,方桌,都包含在桌子里)
上图都是桌子,只是形状不一样,可以看为继承于桌子。
程序中:
关键字 extends
public class 类名(子类、派生类、超类)extends 类名(父类、基类){
}
2.为什么要继承
1).减少代码重复,提高代码重用性
2).提高代码扩展性
3.关于四种修饰符的范围大小
访问修饰符 同类中 同包中 不同包中 不同包但有继承关系的子类中
private 可以 不可以 不可以 不可以
默认的 可以 可以不可以 不可以
protected 可以 可以 不可以 可以
public 可以 可以可以 可以
注意:
a.一个子类只能继承一个父类
b.子类能继承到父类所有的属性和方法,但是并不能调用所有的,要看修饰符,修饰符范围public>protected>默认>private
c.子类还可以自己定义父类所没有的
d.子类中必须要调用父类一个构造方法,否则程序编译报错;调用父类构造方法关键字是super。
e.子类可以定义父类中没有的属性和方法。
4.方法重写
注意:
a.一定要有继承关系
b.子类修饰符范围>父类c.子类重写的返回值,方法名,参数必须与父类完全一样
d.调用看new后面的类名
5.自动转型
父类 对象名=new 子类();
生活中举例,比如老师教学生,学生分为大学生小学生中学生,大、中、小学生都要定义类,但是在老师教学生这里,可以用自动转型,直接斜纹teacher teach(student),然后定义一个student类,让大、中、小学生都继承于student
注意:
编译时看对象名前面的类,运行看new后面的类
存储时看的是=前面的。
就是说,调用一个方法时,如果父类中没有,即会报错,如果父类子类都有,则调用的是子类的方法。
Java编译机制的问题:
Java在编译程序时,只会根据对象名的类型去查找方法是否存在,如果存在,则编译通过,如果不存在则编译报错。
编译的是.java的文件。
运行的是内存中的对象。
6.多态
多态是由方法重载、继承、方法重写、自动转型技术组合的特性。
面向对象编程有三大特性:继承、多态、封装
情景:.回合制对战游戏:奥特曼A和小怪兽A进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼A胜利,则奥特曼A和奥特曼B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果小怪兽A胜利,则小怪兽A和小怪兽B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
要求:类中只能有一个攻击方法,并方法的参数只能有一个。
分析:
对象:角色(奥特曼和小怪兽实际上都是角色,他们可以看为角色的子类)
特征:姓名,血量
行为:对战(另一方)
1.定义一个角色类
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>public class role{
private String name;
int blood;
public void setName(String n){
name=n;}
public String getName(){
return name;}
public void pk(role r){
r.blood--;}</strong></span>
2.定义奥特曼类
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>public class aoteman extends role{
public void pk(xiaoguaishou xgs){
xgs.blood--;
System.out.println(getName()+”与”+xgs.getName()+”战斗”};
If(xgs.blood==0)
System.out.println(getName()+”胜利了”}; </strong></span>
3.定义小怪兽类
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>public class xiaoguaishou extends role{
public void pk(aoteman atm){
atm.blood--;
System.out.println(getName()+”与”+atm.getName()+”战斗”};
If(atm.blood==0)
System.out.println(getName()+”胜利了”};</strong></span>
4.定义总类
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>public class manager{
public static void main{String[] args){
aoteman a=new aoteman();
aoteman b=new aoteman();
a.name=”奥特曼A”;
b.name=”奥特曼B”;
a.blood=5;
b.blood=5;
xiaoguaishou c=new xiaoguaishou();
xiaoguaishou d=new xiaoguaishou();
c.name=”小怪兽A”;
d.name=”小怪兽B”;
c.blood=5;
d.blood=5;
while(a.blood>o&&c.blood>0){
a.pk(c);
If(c.blood==0){
while(a.blood>0&&b.blood>0){
b.pk(a);
If(a.blood==0){
break;}
a.pk(b); }
break;
}
c.pk(a);
If(a.blood==0){
while(c.blood>0&&d.blood>0){
d.pk(c);
If(c.blood==0){
break;}
c.pk(d);
break;}}}</strong></span>
四.测试
如图,编译通过,运行结果正确