面相对象的特征之三:多态

一,多态的概念

        1,什么是多态

                多态是同一个行为具有多个不同表现形式或形态的能力。

                如:带宠物去看病 宠物可以是狗可以是猫 所有看病方法的形参使用猫和狗的父类 宠物,

        2,为什么用多态

                多态不仅能让程序设计更加易实现,也更容易维护和扩展, 使用多态的代码更容易理解和修改。

                多态可以在不同的子父类中使用相同的代码,提高了代码的可复用性。

                多态使得程序在运行时能够动态地选择相应的处理方法,从而增加程序的灵活性。

                多态使得不同的对象能够相互替代,从而增加了程序的可扩展性和可维护性。

        3,多态的作用

二,多态的使用

        1,语法:        

                父类 父类的引用= new 子类();

                父类的引用指向子类的实例。

                编译看左边(子类需要重写父类的方法),运行看右边(运行子类重写后的方法)

                注:如果想执行子类特有的方法,向下转型

        2,实例

public class Dog extends Pet{//子类狗狗  继承  父类宠物
    public void show(){
        System.out.print("狗狗的名字是:"+getName());//重写方法
    }
}
class Cat extends Pet{//子类猫猫  继承  父类宠物
    public void show(){
        System.out.print("猫猫的名字是:"+getName());
    }
}
class Pet{//父类宠物
    private String name;//私有化属性年龄
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void show(){
    }
}
class Test{
    public static void main(String[] args) {
        Pet p1=new Dog();//多态调用狗狗类
        p1.setName("旺财");//调用父类方法赋值姓名属性
        p1.show();//实行狗狗类的show()方法
        Pet p2=new Cat();//多态调用猫猫类
        p2.setName("咪咪");//调用父类方法赋值姓名属性
        p2.show();//实行猫猫类的show()方法
    }
}

          

三,向下转型

        如果想执行子类特有的方法,需要向下转型

        语法:

                   子类  子类的引用=(子类)需要向下转型的类的引用

注:向下转型前需要用instanceof判断 子类和需要向下转型的类的引用是否是同一个类

class Dog extends Pet{//子类狗狗  继承  父类宠物
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {//子类独有的方法
        this.age = age;
    }
    public void show(){
        System.out.print("狗狗的名字是:"+getName()+"年龄是:"+age);
    }
}
class Pet{//父类宠物
    private String name;//私有化属性年龄
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void show(){
    }
}
class Test{
    public static void main(String[] args) {
        Pet p1=new Dog();
        p1.setName("旺财");
        if(p1 instanceof Dog){//判断两个类是否是同一个类
            Dog dog=(Dog)p1;//向下转型
            dog.setAge(12);//转型后可以调用子类独有的方法
        }
        p1.show();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值