Java的多态性

Java的多态性

多态性是面向对象编程的一个重要特征,是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的涵义。可以理解为一个事务的多种形态。

Java实现多态有三个条件:继承,重写和向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用重写的子类方法。

向上转型:父类引用指向子类对象,只能调用父类中已有的方法,不能直接调用子类的方法(向下转型,强制转换类型,把父类强制转换为子类,为了避免出现类转换异常使用关键字instanceof 判断是对象是否是类的实例)。

对象的多态性只适用于方法,不适用于属性。

虚拟方法调用(多态情况下):子类中重写了与父类同名同参数的方法,在多态情况下,父类的方法为虚拟方法,父类动态调用属于子类的该方法。在编译时无法确定调用对象,在运行时确定调用子类方法(动态绑定)。

代码示例:

package Day3;
/*
Java多态性
1.多态性:可以理解为一个事务的多种形态。
2.对象的多态性:父类的引用指向子类的对象(子类的对象赋给父类的引用)。
3.多态性使用:有了对象的多态性以后,时候编译的时候只能调用父类声明的方法,执行的时候实际执行的是子类重写的方法。
4.多态性的使用前提:1.类的继承关系;2.子类有方法的重写;3.父类引用指向子类对象;
5.对象的多态性只适用于方法,不适用于属性
 */
public class SICCSTest {
    public static void main(String[] args) {
        //对象的多态性:父类的引用指向子类的对象
        Animal an1 = new Dog();
        Animal an2 = new Cat();
        //调用的方法是子类重写的方法(虚拟方法)
        an1.shout();//Dog shout
        an2.shout();//Cat shout
        //an1.play();//不能调用父类中没有的方法,编译时an1是Animal类型

        //对象的多态性只适用于方法,不适用于属性
        System.out.println(an1.id);//1001
        System.out.println(an2.id);//1001

        //向下转型,使用子类特有的方法(存在转换不成功的风险,如子类之间强制转换)
        //通过instanceof判断
        if(an1 instanceof Dog){
            Dog dog = (Dog)an1;
            dog.play();//Dog play with kids
        }
        if(an1 instanceof Cat){
            Cat cat = (Cat)an1;
            cat.play();//
        }
//        Dog dog = (Dog)an1;
//        Cat cat = (Cat)an2;
//        dog.play();//Dog play with kids
//        cat.play();//Cat play the ball

        SICCSTest test = new SICCSTest();
        test.func(new Dog());
        test.func(new Cat());



    }

    //通过多态的使用,可以减少重复代码
    public void func(Animal animal){
        animal.eat();
        animal.shout();
    }

}

class Animal{
    int id = 1001;

    public void eat(){
        System.out.println("Animal eat");
    }
    public void shout(){
        System.out.println("Animal shout");
    }

}

class Dog extends Animal{
    int id = 101;
    public void eat(){
        System.out.println("Dog eat");
    }
    public void shout(){
        System.out.println("Dog shout");
    }

    public void play(){
        System.out.println("Dog play with kids");
    }

}

class Cat extends Animal{
    int id =110;
    public void eat(){
        System.out.println("Cat eat");
    }
    public void shout(){
        System.out.println("Cat shout");
    }
    public void play(){
        System.out.println("Cat play the ball");
    }

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JAVA多态性是一种面向对象编程的特性,它允许一个父类的引用变量可以指向其子类的对象,从而实现不同对象的统一调用。在会员管理系统中,多态性可以用来处理不同类型的会员对象,例如普通会员、VIP会员等。 在JAVA中,实现多态性的方式主要有以下几种: 1. 继承:通过继承关系,子类可以继承父类的属性和方法,并且可以重写父类的方法来实现不同的行为。 2. 接口:通过接口定义规范,不同的类可以实现相同的接口,并且根据自身需求来实现接口中的方法。 3. 抽象类:抽象类是一种特殊的类,不能被实例化,只能被继承。通过抽象类,可以定义一些共同的属性和方法,并且子类可以根据需要进行扩展和实现。 在会员管理系统中,可以定义一个父类Member,包含一些共同的属性和方法,例如会员编号、姓名、积分等。然后可以定义不同类型的会员子类,例如普通会员类、VIP会员类等,这些子类可以继承父类Member,并且可以根据需要重写父类的方法或者实现接口中的方法。 通过多态性,我们可以使用父类的引用变量来引用不同类型的会员对象,从而实现对不同类型会员的统一管理和调用。例如,可以定义一个MemberManager类,其中包含一些操作会员的方法,通过传入不同类型的会员对象,可以调用相应的方法来处理不同类型的会员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值