Java ,python面向对象的继承及其区别
JAVA
JAVA继承基本样式
class Demo extends Object{
Demo(int a){
this();
}
Demo(){
super();
}
}
java默认继承Object 类, 并一定会在构造函数中调用super()方法,对父类进行实例化。注意:this()和super()不能同时出现在同一个构造函数中,但super()必须在其中一个构造函数中出现!
Java实例化过程
- 运行父类的静态代码部分
- 再运行子类的静态代码部分
- 执行父类成员代码
- 执行父类构造函数 —— 父类完成实例化
- 执行子类的成员代码块
- 执行子类的构造函数 ——子类实例化完成
# 先执行静态代码部分,包括静态变量声明赋值,静态代码块等。
# !进行默认初始化(变量声明,默认为null 或0)
# 调用构造函数
# 通过子类构造函数调用父类的构造函数进行初始化——父类弹栈
# !进行子类的显示初始化
# 子类特定函数的特定初始化
# 内存地址赋值给变量
java实例化过程的一些细节
PYTHON
PYTHON继承基本样式
class Demo(object):
def __init__(self,a):
super().__init__()
self.a = a
python 实例化过程同java,默认继承object,需要对父类进行实例化。
Python实例化过程
- 执行父类的静态代码
- 执行子类的静态代码
- 执行子类__new__()方法
- 在子类__new__() 方法中调用父类__new__()方法
- 调用父类__init__()方法(父类实例化完成)
- 调用子类__init__()方法(子类实例化完成)
class Demo(object):
# print("父类静态")
def __new__(cls, *args, **kwargs):
# print("父类new")
return object.__new__(cls)
def __init__(self,a):
# print("父类init")
super().__init__()
self.a = a class A(Demo):
def __new__(cls, *args, **kwargs):
# print("子类new")
super().__new__(Demo) #注意:这里默认调用父类的new,可以不写且不调用父类new方法。同样可以达到继承的效果
return object.__new__(cls)
# print("子类静态")
def __init__(self):
super().__init__(1)
# print("子类init")
A()
python实例化过程
对比
继承
Java 对象在调用父类中方法时,该方法调用的方法会优先使用子类的方法,调用的成员变量会优先调用父类的变量。
Python 对象在调用父类中方法时,调用的方法和变量都优先调用子类的方法和变量。
多态
python天生多态
java:因为涉及到变量属性的问题,必须对对象进行降级和转换才能使用子类的方法和属性。
Animal a = new Cat();
//a并不能使用Cat类的功能,所有属性和方法都是Animal父类的
Cat c = (Cat)a; //才能使用
以上例为例,在变量类型是实例类型的父类或者接口的时候,编译和运行存在差别:
- 成员变量:在编译和运行都参考Animal即 = 的左边!
- 方法:编译参考Animal即 = 左边,父类有才编译通过,运行优先参考Cat即参考=右边。(在重名的情况下依然使用的是子类的方法,但是如果调用父类没有的方法,是无法编译通过的。)
- 静态部分: 因为不需要对象,也不存在this,都是参考Animal即=左边!
Java ,python面向对象的继承及其区别的更多相关文章
- Python 面向对象编程 继承 和多态
Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...
- Python面向对象编程——继承与派生
Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...
- Python面向对象03 /继承
Python面向对象03 /继承 目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生 ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- python 面向对象之继承与派生
一:初识继承 1,什么是继承? 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类 ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- Java入门 - 面向对象 - 01.继承
原文地址:http://www.work100.net/training/java-inheritance.html 更多教程:光束云 - 免费课程 继承 序号 文内章节 视频 1 概述 2 继承的特 ...
- python面向对象的继承-组合-02
*面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...
- Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)
继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
随机推荐
- WPF canvas设置旋转角度和偏移位置
/// <summary> /// 设置旋转角度和位置 /// </summary> /// <param name="Angle">角度< ...
- BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description ...
- CentOS7 YUM安装与配置 MySQL5.7
原文链接:http://blog.csdn.net/xyang81/article/details/51759200 安装环境:CentOS7 64位,MySQL5.7 1.配置YUM源 在MySQL ...
- python3笔记<一>基础语法
随着AI人工智能的兴起,网络安全的普及,不论是网络安全工程师还是AI人工智能工程师,都选择了Python.(所以本菜也来开始上手Python) Python作为当下流行的脚本语言,其能力不言而喻,跨平 ...
- leetcode每日刷题计划-简单篇day3
收到swe提前批面试hhh算是ep挂了的后续 努力刷题呀争取今年冲进去! Num 21 合并两个有序链表 Merge Two Sorted Lists 注意新开的链表用来输出结果的是ListNode ...
- 正则表达式re.sub替换不完整的问题现象及其根本原因
title: 正则表达式re.sub替换不完整的问题现象及其根本原因 toc: true comment: true date: 2018-08-27 21:48:22 tags: ["Py ...
- Spring中@相关注解的意义
1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...
- HTML 5 视频/音频
HTML5 Audio/Video 方法 方法 描述 addTextTrack() 向音频/视频添加新的文本轨道 canPlayType() 检测浏览器是否能播放指定的音频/视频类型 load() 重 ...
- quick pdf library控件
quick pdf library库只能在windows环境下运行 1.下载quick pdf library 2.注册控件 进入cmd regsvr32 "C:\Program File ...
- MFC笔记6
1.MFC文件的读写操作 写操作 创建一个编辑框(IDC_INFOR_EDIT1),在里面输入信息,创建一个按钮(IDC_BUTTON),点击按钮会触发(OnBnClickedButton2()函数) ...