一、代码及效果图
1.重写
案例:使用方法重写优化电子宠物系统
代码如下(示例):
package test1;
public class Dog extends Pet{
private String type;
public Dog(String name, int health, int cute, String type) {
super(name, health, cute);
this.type = type;
}
@Override
public void show() {
super.show();
System.out.println("我是一只:"+type);
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package test1;
public class Penguin extends Pet{
private String sex;
public Penguin(String name, int health, int cute, String sex) {
super(name, health, cute);
this.sex = sex;
}
@Override
public void show() {
super.show();
System.out.println("我的性别是:"+sex);
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package test1;
public class Pet {
private String name;
private int health;
private int cute;
public Pet(String name, int health, int cute) {
this.name = name;
this.health = health;
this.cute = cute;
}
public void show(){
System.out.println("宠物的自白:");
System.out.println("我的名字:"+name+"\t"+"我的健康值为" +
health+"\t"+"我和主人的亲密度是"+cute);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getCute() {
return cute;
}
public void setCute(int cute) {
this.cute = cute;
}
}
package test1;
public class Test {
public static void main(String[] args) {
fun(new Dog("欧欧",100,0,"雪纳瑞犬"));
fun(new Penguin("楠楠",100,0,"Q妹"));
}
private static void fun(Pet pet) {
pet.show();
}
}
2.重写equals
案例:重写比较规则,判断两名学员(Student)是否为同一对象
Student相关属性
Id(学号)、name(姓名)、age(年龄)
如果两名学员的学号以及姓名相同,则为同一对象
代码如下(示例):
package test2;
public class Student {
private String name;
private int id;
private int age;
public Student(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Student){
Student s= (Student) obj;
return this.name==s.name && this.id==s.id;
}else {
return false;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package test2;
public class TestStu {
public static void main(String[] args) {
Student stu1= new Student("张三",123,22);
Student stu2= new Student("张三",123,26);
System.out.println(stu1.equals(stu2));
}
}
3.多态
案例:使用多态实现为宠物喂食
宠物饿了,主人需要为宠物喂食,使用多态实现该过程
不同宠物吃的东西不一样
不同宠物吃完东西后恢复健康值不一样
健康值达到100时,不需要继续喂食
代码如下(示例):
package test3;
public class Dog extends Pet{
public Dog(int health) {
super(health);
}
@Override
public void eat(String food) {
System.out.println("狗狗吃"+food+",健康值增加3");
setHealth(getHealth()+3);
}
}
package test3;
public class Master {
public void feed(Pet pet,String food){
pet.eat(food);
}
}
package test3;
public class Penguin extends Pet{
public Penguin(int health) {
super(health);
}
@Override
public void eat(String food) {
System.out.println("企鹅吃"+food+",健康值增加5");
setHealth(getHealth()+5);
}
}
data = pd.read_csv(
package test3;
public class Pet {
private int health;
public Pet(int health) {
this.health = health;
}
public void eat(String food){
System.out.println("宠物吃"+food);
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
if (health>=100){
this.health=100;
System.out.println("已经吃饱了");
}
}
}
package test3;
public class Test {
public static void main(String[] args) {
Master m=new Master();
Dog dog=new Dog(60);
m.feed(dog,"大骨头");
System.out.println(dog.getHealth());
Penguin p=new Penguin(50);
m.feed(p,"鱼");
System.out.println(p.getHealth());
}
}
4.instanceof运算符
案例:使用多态实现主人领养宠物并与宠物玩耍功能
狗具有特有的接飞盘方法,企鹅具有特有的南极游泳方法。请编写测试类分别调用各种具体宠物的特有方法
使用向下转型
使用instanceof判断宠物类型
代码如下(示例):
package test4;
public class Dog extends Pet{
public Dog(int health) {
super(health);
}
public void fly(){
System.out.println("狗狗接飞盘");
}
@Override
public void eat(String food) {
System.out.println("狗狗吃"+food+",将康值增加3");
setHealth(getHealth()+3);
}
}
package test4;
public class Master {
public void feed(Pet pet,String food){
pet.eat(food);
}
public void play(Pet pet){
if (pet instanceof Dog){
Dog dog= (Dog) pet;
dog.fly();
}else if (pet instanceof Penguin){
Penguin p= (Penguin) pet;
p.swim();
}
}
public Pet adopt(String name){
if (name.equals("狗狗")){
return new Dog(60);
}else if (name.equals("企鹅")){
return new Penguin(50);
}else {
return null;
}
}
public Pet donate(String name){
if (name.equals("狗狗")){
return new Dog(60);
}else if (name.equals("企鹅")){
return new Penguin(60);
}else {
return null;
}
}
}
package test4;
public class Penguin extends Pet{
public Penguin(int health) {
super(health);
}
public void swim(){
System.out.println("企鹅在游泳");
}
@Override
public void eat(String food) {
System.out.println("企鹅吃"+food+",将康值增加5");
setHealth(getHealth()+5);
}
}
package test4;
public class Pet {
private int health;
public Pet() {
}
public Pet(int health) {
this.health = health;
}
public void eat(String food){
System.out.println("宠物吃"+food);
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
if (health>100){
this.health=100;
System.out.println("吃饱了,再也吃不下了");
}
}
}
package test4;
public class Test {
public static void main(String[] args) {
Master m=new Master();
Pet p = m.adopt("狗狗");
m.feed(p,"大骨头");
m.play(p);
System.out.println(p.getHealth());
Pet a=m.donate("狗狗");
System.out.println("你捐献的是:"+a.getClass().getName());
}
}
总结
以上就是多态相关案例的内容,主要是利用了继承、重写以及多态等相关的技术来实现的。
版权声明:本文为StruggleBamboo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。