java 中showinfo方法_java的方法重写 ,多态和关键字 instanceof和final

package cn.pen;

//执行类

import java.util.Scanner;public classTest {public static voidmain(String[] args) {//Dog dog = new Dog("二狗",90,0,"土狗");//把Dog的类引入进来//Master master = new Master("王二小");//在把主人类引用进来//master.feed(dog);//把dog(Dog类的入口或钥匙)引入主人类的feed方法//dog.showInfo();//引出Dog类的showInfo方法

/*执行结果:

* 王二小正在喂:二狗

二狗吃狗粮...

我的姓名:二狗,健康值:93,亲密度0,我是一只土狗*/

//每个动物都有吃,但吃的方法不同,造成的结果也就不同,但动物有很多种,我们不能每个动物子类都这样写一遍//所以我们用到了:多态/*多态

*

*

软件设计原则—开闭原则 ,对拓展开放,对修改关闭。为什么要使用多态?对系统进行业务拓展,增加系统的可维护性。

可以理解为多种状态/多种形态

同一事物,由于条件不同,产生的结果不同

程序中的多态

同一引用类型,使用不同的实例而执行结果不同的。

同:同一个类型,一般指父类。

不同:不同的子类实例

不同:针对同一方法执行的结果不同

比如说睡觉,不同的动物睡觉方法不同,最后结果不同*/

/*在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。

在引用数据类型转换过程中,

自动类型转换也称向上类型转换。子类可以自动转换成父类。

多态的实现形式

* 父类类型 引用 子类对象(本质)

Pet pet=null; //同一引用类型(父类)

pet = new Dog("二狗",90,0,"土狗") ;// [ 自动类型转换] 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。

pet.eat(); // 呈现多态

结果:二狗吃狗粮...

王二小正在喂:二狗

**/

//父类作为方法形参实现多态

/*Pet pet=null; //同一引用类型(父类)

pet=new Dog("二狗",100,0,"土狗"); // 父类引用 引用 子类对象

Master master = new Master("王二小");

master.feed(pet); // 呈现多态

pet.showInfo(); // 呈现多态

pet=new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE); // 父类引用 引用 子类对象

master.feed(pet); // 父类引用 引用 子类对象

pet.showInfo(); // 呈现多态

同样的结果,但是我们只在主人类那只需写引用父类的代码就可以了 ,无需向上面那样每个动物都需在主人类那写一遍

* 现在没增加一种动物就只会多写一个类就可以了,无需再主人类那加一条方法;实现一个方法多种使用

结果:

王二小正在喂:二狗

二狗吃狗粮...

我的姓名:二狗,健康值:103,亲密度0,我是一只土狗

王二小正在喂:大脚

大脚在吃鱼...

我的姓名:大脚,健康值:95,亲密度50,我是一只Q妹

父类作为方法的返回值实现多态:*/System.out.println("欢迎光临sxt宠物店");

System.out.println("请选择领养的宠物 1.狗狗 2.企鹅");

Scanner arr=new Scanner(System.in);int type=arr.nextInt(); //控台输入type

Master master = new Master("王二小"); //引用Master类

Pet pet = master.adoptPet(type); //把type赋值给Master类adoptPet方法判断,得出来结果后赋给pet

/*强制类型转换也称向下类型转换。父类可以强制转换成子类

* 子类类型 引用 = (子类)父类对象

* 一般而言,需要判断父类对象的真实类型,用instanceof关键字

* obj instanceOf 类/接口 判断obj是否是类/接口的实例

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

instanceof是判断是否能强制转换,能返回true

* 如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型*/

if(pet instanceof Dog) { //得到从Master得到的返回值pet,然后判断是强制转换给Dog还是Penguin,

Dog dog = (Dog) pet; //判断完之后再一个一个赋值

dog.setName("二狗");

dog.setHealth(90);

dog.setLove(20);

dog.setStrain("土狗");

}else if(pet instanceof Penguin) {

Penguin penguin=(Penguin) pet;

penguin.setName("大脚");

penguin.setHealth(90);

penguin.setLove(20);

penguin.setGender(Penguin.SEX_FEMALE);

}

master.play(pet);//再把被赋完值之后的pet引入Master的piay方法执行再返回结果

pet.showInfo();

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值