java中描述多态的特点_Java中的第三大特性-多态性

一、多态性的概念

多态性是以继承为基础上的,举个例子,人属于动物,狗也属于动物,所以动物就是父类,而人和狗都是动物的子类,都属于动物。

二、多态的使用

(1)多态一般用于方法参数或者方法返回值,特别当一个方法中功能是人和狗共有的,这时候利用多态性,将参数设为父类,就可以少写一个方法,而且对于代码来说也比较容易拓展。下面举个例子:

classAnimal{public voidskill(){

System.out.println("动物拥有属于自己的技巧。。。");

}

}class Person extendsAnimal{

@Overridepublic voidskill(){

System.out.println("人拥有属于自己的技巧。。。");

}

}class Dog extendsAnimal{

@Overridepublic voidskill(){

System.out.println("狗拥有属于自己的技巧。。。");

}

}public classPolymorphism {public static voidmain(String[] args) {

Person person= newPerson();

Dog dog= newDog();//不使用多态性

System.out.println("======不使用多态性======");

person.skill();

dog.skill();//使用多态性

System.out.println("======使用多态性======");

animalSkill(person);

animalSkill(dog);

}public static voidanimalSkill(Animal animal){

animal.skill();

}

}

运行结果:

======不使用多态性======人拥有属于自己的技巧。。。

狗拥有属于自己的技巧。。。======使用多态性======人拥有属于自己的技巧。。。

狗拥有属于自己的技巧。。。

通过结果我们可以看出使用多态的优势,就是当你的子类越来越多的时候,不使用多态的话,代码拓展起来很麻烦,如果使用多态的话,只要是这个类的子类都可以调用,完成相应的功能。

(2)多态的向上转型:首先我们来说一下多态的向上转型,从上面的例子我们可以看出,animalSkill()方法的参数是Animal类,它是Person类和Dog类的父类,这个时候就相当于向上转型,向上转型是自动将Person类和Dog类转为Animal类的,向上转型在平常的日常开发中是经常使用的。

Animal animal1 = newPerson();

Animal animal2= new Dog();

(3)多态的向下转型:多态的向下转型这个操作是需要我们自己手动强转的,所以这个操作就比较危险,因为父类有好多子类,是不能随便强转为任意子类的,否则在运行时会报类转化异常的错误。

public classPolymorphism {public static voidmain(String[] args) {

Animal animal= newAnimal();

Person person=(Person) animal;

person.skill();

}

}

运行结果:

Exception in thread "main" java.lang.ClassCastException: cn.edu.nyist.Animal cannot be cast to cn.edu.nyist.Person

造成这种现象的原因是因为父类会有很多的子类,是不能强制转换为任意子类的,所以这里推荐先将该子类向上转型为父类,然后再将该父类向下转型为该子类

public classPolymorphism {public static voidmain(String[] args) {

Animal animal= newPerson();

Person person=(Person) animal;

person.skill();

}

}

运行结果:

人拥有属于自己的技巧。。。

(3)instanceof关键字的使用:这个关键字主要是用来解决类转化一场这个错误的,它主要是判断一个实例是否属于对应的类或者父类的实例,属于的话返回true,不属于返回false

public classPolymorphism {public static voidmain(String[] args) {

Animal animal= newPerson();if (animal instanceofPerson){

System.out.println("向下转型成功");

Person person=(Person) animal;

person.skill();

}else{

System.out.println("向下转型失败");

}

}

}

运行结果:

向下转型成功

人拥有属于自己的技巧。。。

所以以后在将一个类进行向下转型的时候,首先使用instanceof关键字判断该实例是否为对应类或对应类的父类的实例,是的话,再进行向下转型,否则就不进行转型,这样程序就不会出错了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 子类继承性是指子类可以继承父类的属性和方法,同时还可以添加自己的属性和方法。这样可以减少代码的重复性,提高代码的复用性和可维护性。在Java,使用关键字“extends”来实现子类继承父类。子类可以重写父类的方法,实现多态性多态性是指同一个方法可以有不同的实现方式,这样可以根据不同的情况选择不同的实现方式,提高代码的灵活性和可扩展性。 ### 回答2: 继承是面向对象编程非常重要的概念,它能够让子类从父类继承属性和方法,从而避免了重复编写代码的问题,提高了代码的可复用性和可维护性。在Java,使用关键字extends来实现继承,子类可以继承父类的非私有属性和方法。在这个过程,子类就会继承父类的特性,形成父类和子类之间的IS-A关系。 多态是另一个重要的概念,指的是同一个类在不同的情况下表现出不同的现象。多态有三种表现形式,分别是重载,重写和向上转型。在重载,同一个方法可以有不同的参数列表,重写是指在子类覆盖父类的方法,而向上转型是指父类引用可以指向子类对象。 在Java,继承和多态是密不可分的,子类继承性就是继承和多态的一种表现。子类可以继承父类的属性和方法,从而使子类具有与父类相似的特征,但同时子类也会有自己的一些特征和行为。此时,父类引用指向子类对象时,就可以发生向上转型,从而实现多态的表现。 例如,有一个父类Animal和一个子类Dog,Dog继承了Animal的属性和方法,并且还有自己的独特特征。此时如果定义一个Animal类型的对象a,并将其指向一个Dog类的对象,那么就可以通过a来访问Dog的属性和方法,实现了向上转型和多态的表现。 总的来说,子类继承性是继承和多态的一个体现,它使得子类可以继承父类的特性并添加自己的特征,同时也可以实现向上转型和多态的表现。在面向对象编程,掌握继承和多态是非常基础和重要的知识,能够有效地提高代码的可维护性和可复用性。 ### 回答3: 在面向对象编程,继承是一种重要的概念,子类继承即为子类继承父类的属性和方法。 在Java,子类通过extends关键字来实现继承。子类实现继承后,可以重写父类的方法,并且还可以调用父类已经存在的方法。 继承的好处在于可以使代码更加简洁,避免代码的重复和冗余,同时也方便了代码的维护和升级。 多态则是通过继承来实现的,指同一种类型的对象,在不同的情况下可以具有不同的形态和不同的属性。多态实现的基础是方法重写和方法重载。 在Java多态可以通过向上转型的方式来实现,即父类引用变量可以指向子类的实例。 继承的一个重要的概念是覆盖,即子类可以覆盖父类的方法。Java可以通过@override注解来实现方法的覆盖,这样可以在子类重写父类的方法。 继承的一个重要的注意点是,不能随便使用继承。如果子类继承父类,但与父类没有太多的关系,则可能导致代码重复和冗余。因此,应该仅在确实需要继承父类的情况下才使用继承。 总之,子类继承性是Java继承和多态的一种重要概念,它使代码更加简洁、易于维护,同时也可以实现多态,提高代码的可扩展性和灵活性。在使用时,应该注意继承的适用范围和注意点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值