禹娜day22
多态的使用
父类的引用作为方法的参数
package itlaobing;
public class Pet {
    private String name;
    public void sound() {
    }
    public Pet() {
        super();
    }
    public Pet(String name) {
        super();
        this.name = name;
    }
}
package itlaobing;
public class Dog extends Pet {
    private String name;
    public Dog(String name) {
        super();
        this.name = name;
    }
    @Override
    public void sound() {
        System.out.println("旺旺");
    }
}
package itlaobing;
public class Cat extends Pet {
    private String name;
    public Cat(String name) {
        super();
        this.name = name;
    }
    @Override
    public void sound() {
        System.out.println("喵喵");
    }
}
package itlaobing;
import java.util.Random;
public class PetShop {
        //父类引用作为方法参数时,可以传入该类的任意子类对象,实现多态
        public static void petSound(Pet pet) {
            pet.sound();
        }
        public static void main(String[] args) {
            Pet pets[] = new Pet[] {
                new Dog("大黄"),
                new Cat("花花"),
                new Dog("小黄"),
                new Cat("波斯")
            };
            int index = new Random().nextInt(pets.length);
            petSound(pets[index]);
        }
    }
多态的使用:父类作为方法返回值的情况
public class PetShop {
    //父类引用作为方法参数时,可以传入该类的任意子类对象,实现多态
    public static void petSound(Pet pet) {
        pet.sound();
    }
    //父类引用作为方法返回值时,可以返回该类的任意子类对象,实现多态
    public static Pet getPet(String breed) {
        Pet pet = null;
        switch(breed) {
        case "dog":
            pet = new Dog();
            break;
        case "cat":
            pet = new Cat();
            break;
        }
        return pet;
    }
    public static void main(String[] args) {
        Pet pets[] = new Pet[] {
            new Dog("大黄"),
            new Cat("花花"),
            new Dog("小黄"),
            new Cat("波斯")
        };
        int index = new Random().nextInt(pets.length);
        petSound(pets[index]);
        Pet pet = PetShop.getPet("dog");
        System.out.println("新进的货物是"+pet.toString());
    }
}
分析:父类引用作为方法返回值时,可以返回该类的任意子类对象,实现多态
抽象
抽象类
如果类使用abstract关键字修饰,该类就是抽象类。
public abstract class Pet{}
抽象方法
如果方法使用abstract关键字修饰,该方法就是抽象方法。抽象方法不允许有方法体。不能有{}
public abstract class pet{
    public abstract void sound();
}
抽象类和抽象方法的规则
1.抽象类可以包含普通方法或者抽象方法。
2.抽象类中可以定义实例属性或者静态属性。
3.如果一个类中包含了抽象方法,那么这个类就必须是抽象类。
4.抽象类中不一定包含抽象方法。
5.抽象类不允许实例化。(抽象类的抽象方法没有方法体)
使用抽象类的原因
抽象类在OOP的思想中,是专门在继承关系中,抽象类在继承关系中当父类,让子类继承抽象类。
why?抽象类中定义抽象方法,让子类继承抽象方法。父类通过抽象方法让子类遵守父类的规范(父类的抽象方法),遵守规范是子类实现了父类的抽象方法。
子类继承抽象类后,子类也继承了父类中的抽象方法,此时的子类有两种处理抽象方法的办法。
     第一是将子类定义成抽象类,但是这种这种处理方法导致子类不能被实例化。
第二是子类实现父类的抽象方法,怎么实现呢?就是将子类中抽象方法再定义一遍并且添加方法体。此时子类中就没有抽象方法了,子类也就不是抽象类了,这样子类就可以实例化对象了。
类与类之间存在的三种关系
 is a 继承 use a 使用 has a 包含
##### 关于main方法的args参数的使用
					点赞
				
    
        


评论留言