Java 游戏开发:关于Java面向对象的知识(八)

Java 游戏开发:关于Java面向对象的知识(七)

方法的重写

有些时候 父类的东西往往对于子类不是那么的满意
比如我开发一个游戏 人物父类移动的方法是 上箭头 往前移动 , 这很正常,大多的人物都是如此,但是我现在开发的人物 与众不同 他按住上箭头是 往后移动
子类对父类某个方法进行重新的定义 这就是方法的重写
语法:子类和父类的申明方法必须一致一次

public class CharaFather {
    public void Hit(){
        System.out.println("打出了200点伤害");
    }
}
public class naima  extends  CharaFather{
    @Override
    public void Hit() {
    	// 子类中的方法必须和父类中的方法完全一致
        System.out.println("奶妈在回血");
    }

    public static void main(String[] args) {
        naima n1 = new naima();
        n1.Hit();
    }
}

人物的父类的普通攻击时打出200点伤害 但是奶妈的普通攻击略有特殊 是回血 所以要对Hit方法进行重写
返回结果
重写的话 子类就会覆盖父类的方法 所以方法的重写也就是方法的覆盖 使用super.方法名() 可以调用父类中 被重写的方法,在重写的方法中使用父类中重写之前的方法 叫做 方法的半盖

多态

多态就是同一个对象有多个形态
动物园里有许多动物


public class Cat {
    void Eat(){
        System.out.println("猫在吃鱼~");
    }
}
public class Dog {
    void Eat(){
        System.out.println("狗吃肉");
    }
}
public class Fish {
    void Eat(){
        System.out.println("鱼在吃草");
    }
}

现在我们创建一个铲屎官 喂养员 类 他会 喂猫 喂狗 喂鱼

public class person {
    void feedCat(Cat c){
        c.Eat();
    }
    void feedDog(Dog d){
        d.Eat();
    }
    void feedFish(Fish f){
        f.Eat();
    }

    public static void main(String[] args) {
        Cat c = new Cat();
        Dog d = new Dog();
        Fish f = new Fish();
        person p = new person();

        p.feedCat(c); // 喂猫
        p.feedDog(d); // 喂狗
        p.feedFish(f); // 喂鱼
    }
}

但是当动物多了 我们就要在创建一个新的方法给 人 类,比如动物园来了个猴子 就要创建一个新的方法 feedMonkey 动物少点还好,动物一多 显然是冗余。所以我们可以创建一个feed()方法 传入一个动物类 调用动物类的Eat方法就可以了.

我们可以创建一个Animals动物类 猫是动物 狗是动物 鱼是动物 所以这三个类都可以是动物类的子类

记得多态的意思吧 在开始我就说了 多态就是同一个对象有多个形态
我们一直把猫当做猫看 所以才会写代码

Cat c = new Cat();

我们不妨把猫当动物看?

Animals c = new Cat();

向上面的代码 我们把子类的对象 Cat() 赋值给父类类型的变量 Animals c 这就是常见的 向上转型

利用这个思路我们可以来对之前的代码进行升级

这里是动物类 为了方便我写在了一起

public class Dog extends Animals{
    public void Eat(){
        System.out.println("狗吃肉");
    }
}

public class Cat extends Animals{
    public void Eat(){
        System.out.println("猫在吃鱼~");
    }
}

public class Fish extends Animals{
    public void Eat(){
        System.out.println("鱼在吃草");
    }
}

对饲养员的升级

public class person {
    void feed(Animals a){
        a.Eat();
    }
    public static void main(String[] args) {
        Animals c = new Cat();
        Animals d = new Dog();
        Animals f = new Fish();
        person p = new person();

        p.feed(c); // 喂猫
        p.feed(d); // 喂狗
        p.feed(f); // 喂鱼
    }
}

所以多态的作用就是将不同的数据类型进行统一

多态补充

1、把子类的对象给父类的变量叫做向上转型

把猫当动物看 叫做向上转型

2、把父类的变量转化会子类的变量叫做向下转型
向下类型转化有一定的风险 java必须要求使用强制转化才能向下转型

把某个动物对象 转化成 猫对象
强制转化方法:

Cat c = (Cat)a1;

向上转型 有一个缺点 他会屏蔽掉子类中特有的方法 比如我在猫里面写了个捕老鼠的方法 使用向上转型给Animals 因为动物类没有捕老鼠的方法 所以就会屏蔽猫的这个方法

所以使用特殊方法的时候我们记得使用向下转化将其转化为普通猫类

目前我们就学习完了面向对象的所有特性 封装 继承 多态,下一节课我们就开始编写 赛尔号的回合制游戏 正式开始我们的游戏开发

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值