ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多态、super与this

2022-08-04 21:32:27  阅读:208  来源: 互联网

标签:调用 构造方法 子类 多态 类型 父类 super


多态

  • 子类继承父类,一个父类可以有多个子类,子类在有父类特征的同时,也具有自己的特征,并且能实现不同的效果,就是多态。

方法的多态:同一个方法名:参数列表不同,调用不同的方法(方法的重载);类的不同,调用不同的方法(方法的重写)

类的多态:同一个对象,可根据不同的实参类,调用不同的行为方式;

  • 多态的特点:

  1. 多态的前提必须满足:继承、方法重写、向上转型3个条件

  2. 一个对象的编译类型和运类型可以不一致;

  3. 编译类型在定义对象时,就确定了,不能改变;

  4. 运行类型是可以变化的;

  5. 编译类型看定义时 = 的左边;运行类型看 = 的右边;

  6. 多态是方法的多态,属性没有多态;属性的值看编译类型;

  7. 父类和子类,有联系; 类型转换异常:ClassCastException!

  • 多态的使用

    将父类类型作为方法参数,此时可以直接将子类类型的对象作为实参传递

    将父类类型作为方法返回值,此时可以直接将子类类型的对象作为返回


  • 向上转型:

父类的引用指向了子类的对象

父类类型 引用名 = new 子类类型();向上转型

①引用可以调用父类中的所有成员(遵循访问权限),

②不能调用子类特有成员(因为在编译阶段,能调用哪些成员,由编译类型决定);

③最终运行效果看子类(运行类型)的具体实现;运行类型时是可以变化的,从子类寻找方法至父类


  • 向下转型:

    子类类型 引用名 = (子类类型)父类引用;

    将父类类型的引用转成子类类型,需要强制转换。但可能会丢失方法

    父类的引用指向对象必须是子类类型,才可转换为子类类型,否则报错,转换异常

    向下转型后,可以调用子类类型中所有的成员;

    转型前,需提前做类型检查 instanceof

  • instanceof:

    • 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型;

    • x instanceof y;x是一个对象,y表示一个类或者接口。

    • x、y存在父子关系,编译通过,对返回true;错误返回false;不存在父子关系,编译报错。

    • x是y类(或接口)的实例或者子类实例时,结果返回true,否则返回false。


  • 多态数组

    • 数组的定义类型为父类类型,里面保存的元素为子类类型;

    • 遍历数组,可调用子类类型重写之后的方法;

    • 遍历数组for中,利用instanceof判断元素的运行类型,再进行向下转型,可调用子类特有的方法;

  • 多态参数

    • 方法定义的形参类型为父类类型,实参类型允许为子类类型;

    • 进而调用子类类型的方法和属性;

Java的动态绑定机制

  1. 当调用对象方法的时候,该方法会和该对象的内存地址(即运行类型)绑定;

  2. 当调用对象属性时,没有动态绑定,哪里声明哪里使用;

this关键字

  • this关键字代表本类对象的引用,通过关键字可以隐式的用于调用对象的全局变量和方法;this引用的是本类的一个对象

  • 除了可以调用全员变量和成员方法外,还可以作为方法的返回值以及调用类中的构造方法(this(),此时必须在第一行)this(class-list);class-list指定了本类构造方法中的所有参数;

  • this只能在非静态环境中使用;

  1. 调用对象属性

  2. 调用其他的构造方法,只能构造方法调用构造方法,

this. xxx = ;代表当前类的,=后面的值通常是参数传进来的值

super关键字

  • 由于子类不能继承父类的构造方法,如果要调用父类的构造方法,可以使用super关键字。super可以用来访问父类的构造方法、非静态方法和属性。

  • super关键字的功能:在子类的构造方法中显式的调用父类构造方法

    访问父类的成员方法和变量

super调用父类构造方法:super(parameter-list);parameter-list指定了父类构造方法中的所有参数,super()必须在子类构造方法的方法体的第一行

  • 注意点:

    1.只能在非静态环境中使用;

    2.super调用父类的构造方法,必须在构造方法的第一行

    3.super必须只能出现在子类的方法或者构造方法中

    4.super和this 不能同时存在一个构造方法里

  • 对比this

    代表的对象不同:this本身调用者这个对象;super代表父类对象的引用

    前提不一样:this没有继承也可以使用,super只能在继承条件下才可以使用

    构造方法:this();本类的构造,super();父类的构造

final关键字

  • final修饰类,这个类不能被继承,但不影响创建对象;

  • final修饰的方法不能被重写,但父类没有被final修饰的方法,子类重写后可以加final;

  • final修饰变量,代表是常量,只能够赋值一次,当修饰的是引用的类型的时候,不能被重新赋值,但可以修改对象的属性;

标签:调用,构造方法,子类,多态,类型,父类,super
来源: https://www.cnblogs.com/xuduoduo92/p/16552368.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有