zoukankan      html  css  js  c++  java
  • 多态

    1.多态

         1)形式1:父类做形参,子类做实参

         2)形式2:父类做引用类型,子类实例化(自动转换)

         3)形式3:父类作为方法的返回值,子类实例化

     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *父类 宠物类
     9  */
    10 public class Pet {
    11    public void eat(){
    12        System.out.println("pet正在吃");
    13    }
    14 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *子类:狗狗类
     9  */
    10 public class Dog extends Pet{
    11   public void eat(){
    12       System.out.println("狗狗吃狗粮");
    13   }
    14   
    15   public void catchFlyDisk(){
    16       System.out.println("狗狗玩飞盘");
    17   }
    18 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *企鹅类
     9  */
    10 public class Penguin  extends Pet{
    11    public void eat(){
    12        System.out.println("企鹅吃鱼");
    13    }
    14    
    15    public void swiming(){
    16        System.out.println("企鹅游泳");
    17    }
    18 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *
     9  */
    10 public class Cat extends Pet {
    11     public void eat(){
    12         System.out.println("猫吃猫粮");
    13     }
    14     
    15     public void ball(){
    16         System.out.println("猫玩球");
    17     }
    18 1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *主人类 
     9  */
    10 public class Master {
    11     
    12        public void feed(Pet pet){
    13            pet.eat();
    14        }
    15       
    16    //领养宠物 多态形式3:父类作为方法返回值,子类实例化  类型自动转换
    17        public Pet getPet(int typeid){
    18            Pet pet=null;
    19            if(typeid==1){
    20                 pet=new Dog();
    21            }
    22            else if(typeid==2){
    23                 pet=new Penguin();
    24            }
    25            else if(typeid==3)
    26            {
    27                 pet=new Cat();
    28            }
    29            return pet;
    30        }
    31    
    32    
    33 1 package bdqn.javademos;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Test {
     6 
     7     /**
     8      * @param args
     9      */
    10     public static void main(String[] args) {
    11         //多态的形式1
    12         Dog dog=new Dog();
    13         
    14         Penguin peng=new Penguin();
    15         
    16         Cat cat=new Cat();
    17         Master ms=new Master();
    18         ms.feed(dog);
    19         ms.feed(peng);
    20         ms.feed(cat);
    21         
    22         //多态的形式2:父类做类型,子类实例化
    23         Pet pet=new Dog();//自动转换
    24         pet.eat();
    25         
    26         //调用领养宠物 形式3:父类作为方法的返回类型
    27         System.out.println("请选择您要领养的宠物:(1-狗狗 2-企鹅  3-猫) ");
    28         Scanner input=new Scanner(System.in);
    29         int xz=input.nextInt();
    30         Master dx=new Master();
    31         Pet pets=dx.getPet(xz); 
    32         pets.eat();         
    33     }
    34 }

    2.重写方法

         1)位置:子类和父类中有同名的方法,

         2)方法名相同,返回类型和修饰符相同。方法体不同

    3.instanceof(可以当成指向的概念)

     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *父类 宠物类
     9  */
    10 public class Pet {
    11    public void eat(){
    12        System.out.println("pet正在吃");
    13    }
    14 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *子类:狗狗类
     9  */
    10 public class Dog extends Pet{
    11   public void eat(){
    12       System.out.println("狗狗吃狗粮");
    13   }
    14   
    15   public void catchFlyDisk(){
    16       System.out.println("狗狗玩飞盘");
    17   }
    18 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *企鹅类
     9  */
    10 public class Penguin  extends Pet{
    11    public void eat(){
    12        System.out.println("企鹅吃鱼");
    13    }
    14    
    15    public void swiming(){
    16        System.out.println("企鹅游泳");
    17    }
    18 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *
     9  */
    10 public class Cat extends Pet {
    11     public void eat(){
    12         System.out.println("猫吃猫粮");
    13     }
    14     
    15     public void ball(){
    16         System.out.println("猫玩球");
    17     }
    18 }
     1 /**
     2  * 
     3  */
     4 package bdqn.javademos;
     5 
     6 /**
     7  * @author xjz
     8  *主人类 
     9  */
    10 public class Master {
    11     
    12        public void feed(Pet pet){
    13            pet.eat();
    14        }
    15       
    16    //领养宠物 多态形式3:父类作为方法返回值,子类实例化  类型自动转换
    17        public Pet getPet(int typeid){
    18            Pet pet=null;
    19            if(typeid==1){
    20                 pet=new Dog();
    21            }
    22            else if(typeid==2){
    23                 pet=new Penguin();
    24            }
    25            else if(typeid==3)
    26            {
    27                 pet=new Cat();
    28            }
    29            return pet;
    30        }
    31    //主人和宠物玩耍的行为
    32        public void play(Pet pet){
    33            if (pet instanceof Dog) {
    34                 Dog dog=(Dog)pet;//向下转型
    35                 dog.catchFlyDisk();
    36         }else if(pet instanceof Penguin){
    37               Penguin peng=(Penguin)pet;
    38               peng.swiming();
    39         }else  if(pet instanceof Cat){
    40             Cat cat=(Cat)pet;
    41             cat.ball();
    42         }
    43            
    44            
    45            
    46        }
    47    
    48 }
     1 package bdqn.javademos;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Test {
     6 
     7     /**
     8      * @param args
     9      */
    10     public static void main(String[] args) {
    11         //多态的形式1
    12         Dog dog=new Dog();
    13         
    14         Penguin peng=new Penguin();
    15         
    16         Cat cat=new Cat();
    17         Master ms=new Master();
    18         ms.feed(dog);
    19         ms.feed(peng);
    20         ms.feed(cat);
    21         
    22         //多态的形式2:父类做类型,子类实例化
    23         Pet pet=new Dog();//自动转换
    24         pet.eat();
    25         
    26         //调用领养宠物 形式3:父类作为方法的返回类型
    27         System.out.println("请选择您要领养的宠物:(1-狗狗 2-企鹅  3-猫) ");
    28         Scanner input=new Scanner(System.in);
    29         int xz=input.nextInt();
    30         Master dx=new Master();
    31         Pet pets=dx.getPet(xz); 
    32         pets.eat();
    33         
    34         dx.play(dog);
    35 
    36     }
    37 
    38 }

    ---多态可以减少类中的代码量

     可以提高代码的可扩展性和可维护性

    ---向上转型——————子类转换为父类

    自动进行类型转换

    ---向下转型——————父类转换为子类

    结合instanceof运算符进行强制类型转换

  • 相关阅读:
    简单四则运算实现--第二次作业
    人生第一篇博客
    团队任务1:第一次团队会议
    第二次作业
    自我介绍
    五号团队—团队任务4:每日立会(2018-11-27)
    软件设计与开发准备
    原型设计与UI设计
    第一次团队会议
    课后作业2
  • 原文地址:https://www.cnblogs.com/renshihao/p/7478917.html
Copyright © 2011-2022 走看看