六、面向对象之继承

1.概念
如果两个或者两个以上的类,具有相同的属性和方法的话,我们可以抽取一个类出来,在抽取出来的类中声明各个类中公有的属性和方法

被抽取出来的类---父类、超类、基类
两个或者两个以上的类---子类、派生类

他们之间的关系----子类继承自父类

2.语法:
父类
访问权限修饰符 class 父类类名{
//公有的属性和对应的方法
}
子类
访问权限修饰符 class 子类类名 extends 父类类名{
特有的属性和方法
}

结论:
子类可以访问到父类中能看见的【在访问权限内的,除了private】所有属性
子类可以访问到父类中能看见的【在访问权限内的,除了private】所有方法
构造方法不能被继承,每个类都应该有自己的独特的构造方法
实例化子类对象的时候,不管调用的是子类的哪一个构造方法,都会默认去调用父类无参的构造方法
一个父类有多个子类
一个子类只能有一个父类【单继承】
类之间,Java支持多重继承不支持多继承
举例说明:A B C
多继承:A exteds B,C【这是不支持的】
多重继承:A extends B B exteds C

3.子类对象实例化的过程
子类对象在实例化的时候,先实例化父类部分,然后实例化子类部分

对象在内存中生成的过程
a.将对象所需的类文件加载入文件
b.在内存中的栈空间开辟相应的空间
c.通过new关键字在对内存中开辟空间
d.将对象中的非静态的成员变量赋值,
e.调用对应的构造方法,给成员变量赋值
f.通过子类的构造方法默认的去调用父类的构造方法,初始化父类部分

4.super关键字
this:表示对当前对象的引用
super:表示对父类对象的引用
a.super.属性 表示访问父类中的成员变量
b.super.方法 表示访问父类中的方法
c.super() 调用父类中的构造方法

super.属性和this.属性获取到的结果一样的【除了private修饰的属性】
super.方法和this.方法相当与调用了同一个方法

注意问题:
尽量避免子类中出现和父类同名的成员变量
如果在子类中出现了和父类中同名的方法,this.方法调用当前类中的方法,覆盖父类同名的方法

this():
a.只能出现在子类构造方法第一行
b.只能出现一次
c.具体调用的是父类中的哪个构造方法,取决于所传的参数
d.this()和super()不能同时出现

继承的总结:
1>对于类而言,Java中使用的单继承【一个子类只能有一个父类】
2>要将确实存在继承关系的类设计为继承,可以最大限度上提高代码的复用性
3>子类可以从对应的父类中继承在访问权限内的属性和方法
4>父类中的构造方法不能被子类继承【每个类中都有自己特有的构造方法】

时间: 2024-08-29 17:41:10

六、面向对象之继承的相关文章

Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: ? ? ? ? ? ?将一些东西封装到一个地方,你还可以取出来 ? ? ? ? ? ?类设置静态属性, 设置一些方法 或者 对象, 对象可以在其对象封装一些属性 多态: ? ? ? ? ? ?python默认支持多态, 多态指的是一种事务具有多种形态 ? ? ? ? ? ?1.多态可以增加代码的灵活度: ? ? ? ? ? ?2.以继承和重写父类方法为前提: ?

面向对象之继承

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 面向对象之继承 { class Program { static void Main(string[] args) { //记者:我是记者,我的爱好是偷拍,我的年龄34,我是一个男的 //程序员:我叫孙权 我的年龄23 我是男生 我的工作年限是3年

黑马程序员——Java基础---面向对象之继承

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                 面向对象之继承  一:继承(extends) (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构.

javascript面向对象程序设计——继承初步(by vczero)

上一篇说了javascript的封装,没有刻意去说javascript的“共有函数”.“私有函数”,因为个人觉得这只是作用域的问题,我们不能刻意的模仿强类型语言(C++/JAVA)而去编写代码.尊重每一门语言的特性才是最为重要的. 一.基于prototype原型的继承 1 var Person = function(name, age){ 2 this.name = name; 3 this.age = age; 4 } 5 6 Person.prototype = { 7 addUser: f

C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

面向对象--多继承&amp;派生类对象内存布局分析&amp;各基类指针所指向的位置分析

背景 原文链接:ordeder  http://blog.csdn.net/ordeder/article/details/25477363 关于非虚函数的成员函数的调用机制,可以参考: http://blog.csdn.net/yuanyirui/article/details/4594805 成员函数的调用涉及到面向对象语言的反射机制. 虚函数表机制可以查看下面这个blog: http://blog.csdn.net/haoel/article/details/1948051 总结为: 其一

【面向对象】继承(转载)

[面向对象]继承 1.继承 1)复用:开发只需要定义独有的功能(属性和方法),再复用曾经写过的功能(属性和方法) 2)extends:继承的关键字 格式:class 子类 extends 父类 3)子类可以继承父类的属性和方法 4)继承本质:把父类的属性和方法代码拷贝到子类中,在写子类代码时候,可以减少代码量,只需要添加新的部分 5)java中继承是单继承,但可以层层继承 单继承:子类只能有一个直接父类 案例: public class Demo2 { public static void ma

转 python语法学习面向对象之继承

传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始化方法__init__,可以理解为构造,self,理解为this,等等在前一篇文章中介绍过,现在就学习类的继承. 继承: 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型关系. 需要注意的地方:继承语法   class 派生类

C++ Primer 学习笔记_69_面向对象编程 -继承景况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

轻松学习JavaScript十三:JavaScript基于面向对象之继承(包含面向对象继承机制)

一面相对象继承机制 今天算是什么都没干,尽在了解面向对象三大特性之一的继承了,过去的学习的C++和C#都是正统的面向对象语 言,学习的时候也没有怎么深入了解过,只是简单的学习最基础的继承.下午在看继承机制的时候,看到一个很经典 的继承机制实例.这个实例使用UML很好的解释了继承机制. 说明继承机制最简单的方式是,利用一个经典的例子就是几何形状.实际上,几何形状只有两种,即椭圆形(是圆 形的)和多边形(具有一定数量的边).圆是椭圆的一种,它只有一个焦点.三角形.矩形和五边形都是多边形的一种, 具有