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.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
随机推荐
- JavaWeb——tomcat manager 403 Access Denied .You are not authorized to view this page.
403 Access Denied You are not authorized to view this page. If you have already configured the Manag ...
- Java 中 Gson的使用
JSON 是一种文本形式的数据交换格式,它比XML更轻量.比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java.Gson.Jackson.Fast ...
- 1.微信小程序里如何设置当地时间?
方法一: 1.效果图 2.wxml code: <!--pages/index/index.wxml--> <text>当前时间:{{time}}</text> & ...
- 解决spring-security session超时 Ajax 请求没有重定向的问题
开始时, 代码是这样的: $.ajax({ type : "POST", url : sSource, cache : false, dataType : "json&q ...
- java中异常处理
看到一篇异常处理的好文章: Java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字. try 关键字后紧跟一个花括号括起来的代码块,简称try块.同理:下 ...
- leetcode160
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...
- Django之form模板的使用
form模块的简介与用处 1.form 是前后端交互的一种方式, form表单提交的一种,django中有一个模块是form他主要用处就过滤前端form提交的数据 1. forms 模块是处理前后台的 ...
- sql查询语句for xml path语法
[原地址] for xml path作用:将多行的查询结果,根据某一些条件合并到一行. 例:现有一张表 执行下面语句 select Department, (SELECT Employee+',' F ...
- 转 cxgrid属性说明
TCXGRID控件:属性:ActiveLevel: 当前层BorderStyle: 窗口风格Color: 颜色FocusedView: 当前View;Font: 字体LevelTabs: 类似Page ...
- mysql连接测试java脚本
JDBC.java import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.uti ...