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.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
随机推荐
- Spring MVC Controller异常处理总结
在项目开发过程中,经常遇到服务被攻击的情况,虽然接口在设计过程中有相当多的安全措施,例如cookie校验.风控.访问熔断等相关技术保证服务的安全性,不过感觉还是有必要收集分析一下这些攻击请求者,以备为 ...
- win7激活成功 但每次开机后又显示此windows副本不是正版的解决办法
进入命令行界面,输入 SLMGR -REARM 命令,点击回车 此方法只是暂时激活系统,大概4个月左右,即要使用此方法再次进行激活
- py库: arrow (时间)
arrow是个时间日期库,简洁易用.支持python3.6 https://arrow.readthedocs.io/en/latest/ arrow官网api https://github.com/ ...
- centos7 卸载 jdk
################ jdk 的安装 ###########################参考:https://www.cnblogs.com/Dylansuns/p/6974272.h ...
- oracle 创建表,删除表,修改表,查询表
1,获取当前用户下的所有表信息 => SELECT * FROM user_tables 1.1,查询某一张表的字段信息:SELECT * FROM user_tab_columns w ...
- Mybatis运行错误:信息: SQLErrorCodes loaded: [DB2, Derby, H2, HDB, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
Mybatis运行出现错误提示: 五月 23, 2018 12:07:22 上午 org.springframework.jdbc.support.SQLErrorCodesFactory <i ...
- phpstorm 不能自动打开上次的历史文件
问题产生的原因:可能是电脑非正常关机,导致phpstrom 无法正常关闭. 一开始我以为是配置上那里出现了问题,所以直接就把配置删除了,然后生成了默认配置.发现还是无法解决问题.然后一个个配置查阅过去 ...
- Linux Tomcat安装部署项目
一.上传Tomcat服务器
- MFC笔记8
1.在循环使用数组时需要清理数组 CString str; memset(str,0,strlen(str)); 判断两个字符串包含数字大小是否相等 CString str="22" ...
- Python利用PIL生成随机验证码图片
安装pillow: pip install pillow PIL中的Image等模块提供了创建图片,制作图片的功能,大致的步骤就是我们利用random生成6个随机字符串,然后利用PIL将字符串绘制城图 ...