类的继承

类和对象 类的继承
一.背景简介
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.方法重写

类跟父类的方法不一样时,需要用到重写,比如说学生类是总类,大学生、中学生类继承于学生类,就可以在总类里定义也study方法,因为大、中学生study方法不一样,继承之后就可以重写这个方法。

注意:

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>


四.测试
如图,编译通过,运行结果正确




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值