ポリモーフィズム
1.コードとレンダリング
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.書き換えは等しい
ケース:比較ルールを書き直して、2人の学生(学生)が同じオブジェクトであるかどうかを判断します。
学生関連の属性
ID(学生番号)、名前(名前)、年齢(年齢)
2人の学生が同じ学生番号と名前を持っている場合、それらは次のようになります。同じオブジェクト
コードは次のとおりです(例):
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を使用して
ペットのタイプを判別してください。
コードは次のとおりです(例):
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());
}
}
総括する
上記は、主に継承、書き換え、ポリモーフィズムなどの関連技術を使用して実現されるポリモーフィズム関連のケースの内容です。