网站首页 > 精选教程 正文
我们知道JAVA是一种面向对象的编程语言,在面向对象的编程中提到过它的三个基本特征:继承、封装、多态。所以要想熟练的使用这一种编程语言,我们应该把与它有关的知识了解一遍,那么我们今天的文章从它的特征之一继承说起。
泛化与继承的关系
文章在说继承之前,我们先了解一下泛化。在很多情况下,包括在很多书本上都认为泛化跟继承是同一种关系。我们对泛化和继承做一下对比。
首先我们要知道泛化的定义:泛化关系是类元的一般描述和具体描述之间的关系,具体描述建立在一般描述的基础之上,并对其进行了扩展(摘自某百科定义)。我们可以理解为泛化是可传递的、可以跨越任意层次的。这样我们是不是可以认为泛化是从下往上的抽象过程。即泛化是父类进行扩展的一个过程。
当多个类中有相同的实例变量和方法时,我们可以把这些类当中相同的实例变量和方法拿出来,放到一个公共的类当中,这个公共的类我们称之为父类,在其他的类中使用这些变量和方法时,可以从父类中获取,我们称之为继承,即一个从上往下的过程。
综上所述,我们可以看出继承关系是泛化关系的反关系,即子类是父类的继承,父类是子类的泛化。
extends关键字和继承中的构造方法
通过extends关键字可以实现类的继承,子类(Sub class)可以继承父类(Super class)的成员变量及成员方法,同时可以定义自己的成员变量和成员方法。Java语言不支持多重继承,一个类只能继承一个父类,但一个父类可以有多个子类。
子类的构造方法中必须通过super关键字调用父类的构造方法,这样可以妥善的初始化继承自父类的成员变量。如果子类的构造方法中没有调用父类的构造方法,Java编译器会自动的加入对父类无参构造方法的调用(如果该父类没有无参构造方法,则编译错误)。
父类的引用指向子类的对象:一个子类的对象可以想上造型为父类的类型,即,定义父类型的引用可以指向子类的对象;父类的引用可以指向子类的对象,但通过父类的引用只能访问父类所定义的成员,不能访问子类扩展的部分。
方法的重写
子类可以重写(覆盖)继承自父类的方法,即方法名和参数列表与父类的方法相同;但实现方法不同。当子类对象的重写方法被调用时(无论是通过子类的引用调用还是通过父类的引用调用),运行的是子类的重写后的版本。
重写中使用super关键字:子类在重写父类方法时,可以通过super关键字调用父类版本。
重写和重载的区别
重载和重写是完全不同的语法现象,区别如下:
-重载是指在一个类中定义多个方法名相同但参数列表不同的方法,在编译时,根据参数的个数和类型来决定绑定哪个方法。
-重写是指在子类中定义和父类完全相同的方法。在程序运行时,根据对象的类型不同(而不是引用类型)而调用不同的版本。
重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法;因为:变量obj的类型为Super,因此:Goo的g(Super)的方法被调用。
重写遵循“运行期绑定”,即在运行的时候根据引用变量指向的实际对象类型调用方法;因为:obj实际指向的是子类的对象,因此:子类重写后的f方法被调用。
知识无限,能力有限。小编在文章编辑过程中难免出现不尽人意的地方,欢迎大家批评指正,小编也将不断积累完善自己,让我们共同进步。
猜你喜欢
- 2025-05-08 1.5、Java面向对象编程:类与对象、继承、多态、封装
- 2025-05-08 Java中的面向对象编程思想深度解读
- 2025-05-08 Java中的面向对象编程思想(java面向对象编程原则)
- 2025-05-08 Java的"两面性":面向对象与元编程技术的共生之道
- 2025-05-08 java面向对象编程(Java面向对象编程孙卫琴 电子版)
- 2025-05-08 2、Java面向对象编程思想(超详细)
- 2025-05-08 Java 学习之面向对象思想、类、对象
- 2025-05-08 揭秘Java中的面向对象模型(java面向对象几大特征)
- 2025-05-08 快速对比理解,编程中,什么是面向对象,什么是面向过程
- 2025-05-08 java面向对象三大特性:封装、继承、多态——举例说明(转载)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)