博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之多态的使用
阅读量:5166 次
发布时间:2019-06-13

本文共 5172 字,大约阅读时间需要 17 分钟。

java之多态的使用

首先,什么是多态?我们应该从什么角度来理解多态?其实,我们不妨把多态理解成一种事物的多种存在形态,比如,猫和狗都可以变成动物,而动物又可以变成猫和狗。

为了充分理解多态,我们可以从以下这几个方面来理解多态。

第一、从多态的体现方面:我们使用多态的时候,创建的是父类的引用,开辟的是子类的空间,由于没有开辟父类的空间,所以是父类的引用指向子类对象,并不是真正的父类自己创建了对象,而且父类对象的引用还可以作为函数参数来接收子类对象哦!

第二、多态实现的前提:必须是类与类之间要有关系,要么继承,要么实现,存在覆盖,其实就是有抽象函数。

第三、从多态的好处:大大提高程序的可拓展性

第四、多态的应用:1.父类对象的引用指向子类对象,其实本质上是一个向上转型,就像int转成double一样,儿子穿了一身爸爸的衣服,扮成了爸爸。2.但变成了爸爸之后,只能使用爸爸特有的技能,儿子怎么能够使用自己本身的技能呢?这时候就需要向下转型,脱下伪装,将父类对象的引用强转成子类类型,就可以使用子类特有的技能了。

第五、多态的弊端:提高了拓展性,但是只能使用父类的引用访问父类的成员。


多态:可以理解为事物存在的多种体现形态。

人:男人,女人动物:猫,狗。猫 x = new 猫();动物 x = new 猫();
  1. 多态的体现

    父类的引用指向了自己的子类对象。
    父类的引用也可以接收自己的子类对象。

  2. 多态的前提

    必须是类与类之间有关系。要么继承,要么实现。
    通常还有一个前提:存在覆盖。

  3. 多态的好处

    多态的出现大大的提高程序的扩展性。

  4. 多态的弊端:

    提高了扩展性,但是只能使用父类的引用访问父类中的成员。

  5. 多态的应用

/*        动物,        猫,狗。        */                abstract class Animal {
abstract void eat(); } class Cat extends Animal {
public void eat() {
System.out.println("吃鱼"); } public void catchMouse() {
System.out.println("抓老鼠"); } } class Dog extends Animal {
public void eat() {
System.out.println("吃骨头"); } public void kanJia() {
System.out.println("看家"); } } class Pig extends Animal {
public void eat() {
System.out.println("饲料"); } public void gongDi() {
System.out.println("拱地"); } } //----------------------------------------- class DuoTaiDemo {
public static void main(String[] args) {
//Cat c = new Cat(); //c.eat(); //Dog d = new Dog(); //d.eat(); //Cat c = new Cat(); /* Cat c1 = new Cat(); function(c1); function(new Dog()); function(new Pig()); */ //Animal c = new Cat(); //c.eat(); function(new Cat()); function(new Dog()); function(new Pig()); } public static void function(Animal a) {
//Animal a = new Cat(); a.eat(); //a.catchMouse(); } /* public static void function(Cat c)// { c.eat(); } public static void function(Dog d) { d.eat(); } public static void function(Pig p) { p.eat(); } */ }


多态:可以理解为事物存在的多种体现形态。

人:男人,女人动物:猫,狗。猫 x = new 猫();动物 x = new 猫();
  1. 多态的体现
    父类的引用指向了自己的子类对象。
    父类的引用也可以接收自己的子类对象。
  2. 多态的前提
    必须是类与类之间有关系。要么继承,要么实现。
    通常还有一个前提:存在覆盖。
  3. 多态的好处
    多态的出现大大的提高程序的扩展性。
  4. 多态的弊端:
    虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
  5. 多态的应用
  6. 多态的出现代码中的特点(多态使用的注意事项)

第二个问题:如何使用子类特有方法。

/*    动物,    猫,狗。    */        class Cat extends Animal {
public void eat() {
System.out.println("吃鱼"); } public void catchMouse() {
System.out.println("抓老鼠"); } } class Dog extends Animal {
public void eat() {
System.out.println("吃骨头"); } public void kanJia() {
System.out.println("看家"); } } class Pig extends Animal {
public void eat() {
System.out.println("饲料"); } public void gongDi() {
System.out.println("拱地"); } } //----------------------------------------- class DuoTaiDemo2 {
public static void main(String[] args) {
//Animal a = new Cat();//类型提升。 向上转型。 //a.eat(); //如果想要调用猫的特有方法时,如何操作? //强制将父类的引用。转成子类类型。向下转型。 ///Cat c = (Cat)a; //c.catchMouse(); //千万不要出现这样的操作,就是将父类对象转成子类类型。 //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。 //多态自始至终都是子类对象在做着变化。 // Animal a = new Animal(); // Cat c = (Cat)a; /* 毕姥爷 x = new 毕老师(); x.讲课(); 毕老师 y = (毕老师)x; y.看电影(); */ function(new Dog()); function(new Cat()); } public static void function(Animal a) {
//Animal a = new Cat(); a.eat(); /* if(a instanceof Animal) { System.out.println("haha"); } else */ if(a instanceof Cat) {
Cat c = (Cat)a; c.catchMouse(); } else if(a instanceof Dog) {
Dog c = (Dog)a; c.kanJia(); } /* instanceof : 用于判断对象的类型。 对象 intanceof 类型(类类型 接口类型) */ } }

转载于:https://www.cnblogs.com/onefine/p/10499389.html

你可能感兴趣的文章
CodeForces - 449D Jzzhu and Numbers
查看>>
mysql批量插入更新操作
查看>>
静态代码审查工具FxCop插件开发(c#)
查看>>
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>
Generate SSH key
查看>>
URL中不应出现汉字
查看>>
SSH框架面试总结----1
查看>>
如何防止Arp攻击
查看>>
luoguP1313 [NOIp2011]计算系数 [组合数学]
查看>>
清明 DAY2
查看>>
[LintCode] 全排列
查看>>
Windows内存管理
查看>>
jquery 禁止页面提交的小方法
查看>>
ClassList 标签的用法
查看>>
2017/5/10 freeCodeCamp Bootstrap部分总结
查看>>
结对编程项目作业4
查看>>