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.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
随机推荐
- postgresql模糊查询json类型字段内某一属性值
需求场景: 目录以jsonb格式存储在数据库表t的chapter字段中,需要菜单路径中包含指定字符串(比如“语文”或者“上学期”)的menu 以下为chapter字段存储json示例: { " ...
- django之两个使用模板的例子
from django.db import models # Create your models here. class Book(models.Model): title=models.CharF ...
- android 开发 Intent使用技巧点
判断Intent是否为null: if (intent.resolveActivity(getPackageManager())!=null) { //判断Intent是否为null // Inten ...
- ORM对象关系映射
ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...
- 【机器学习_7】numpy
1. 定义 入门选手不抄作业了,先简单理解下,numpy最大的应用大概是方便做数学运算啥的,功劳在于一个叫ndarray(多维数组)的数据类型.numpy本身没有强大分析能力,只是pandas的基础啥 ...
- [解决]CXF wsdl2java 生成代码存在的一些问题
1.环境 CXF版本:3.2.4 JDK版本:1.8.0_112 2.问题 2.1.问题种类1 属性 "Value" 已定义.请使用 <jaxb:property> 解 ...
- 利用python的requests发送http请求
>>> from requests import put, get >>> put('http://localhost:5000/todo1', data={'da ...
- mysql_day04
MySQL-Day03回顾1.索引 1.普通索引 index 2.唯一索引(UNI,字段值不允许重复,但可以为NULL) 1.创建 1.字段名 数据类型 unique 2.unique(字段名), u ...
- DOM 节点node
DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构,即在HTML中所有内容都是节点.文档节点是每个文档的根节点,文档节点有一个子节点,称为文档元素.每个文档只能有一个文档元素.在HTM ...
- C程序的编译与链接
编译器驱动程序 编译器驱动程序可以在用户需要时调用语言预处理器.编译器.汇编器和链接器. 例如使用GNU编译系统,我们需要使用如下命令来调用GCC驱动程序: gcc -o main main.c 编译 ...