多态

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运算符进行强制类型转换

原文地址:https://www.cnblogs.com/renshihao/p/7478917.html