当我们准备编写一个类的时候,发现某个类有我们所需要的成员变量和方法,如果我们想复用这个类中的成员变量和方法,即在所编写的类中不用声明成员变量就相当于有了这个成员变量,不用定义方法就相当于有了这个方法,那么我们可以将编写的类定义为这个类的子类,子类可以让我们不必一切“从头
this关键字 含义: 存储的“当前对象”的引用。this代表当前对象。 this使用位置 this在实例初始化相关的代码块和构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁 this在非静态实例方法中:表示调用该方法的对象,即谁在调用,this就代表谁。 this不能出现在静态代码块和
参考源 https://www.bilibili.com/video/BV1u3411P7Na?spm_id_from=333.999.0.0&vd_source=299f4bc123b19e7d6f66fefd8f124a03 面向对象设计原则 在进行软件开发时,不仅需要将基本的业务完成,还要考虑整个项目的可维护性和可复用性。 因此在编写代码时,应该尽可能的规范,不然随着
继承中方法的覆盖重写应用场景 1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。 2. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。 继承中构造方法的访问特点 当类之间产生了关系,其中各类中的构造方法,又产生了哪些影响呢? 首先我们要回忆两个事情,构造
super和this的用法 super和this的含义 super :代表父类的存储空间标识(可以理解为父亲的引用)。 this :代表当前对象的引用(谁调用就代表谁)。 1. 访问成员 输出结果: 2. 访问构造方法 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默
super和this关键字图解 父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空 间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构 造方法调用时,一定
继承中成员方法的访问特点: 成员方法不重名: 如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对 应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。代码如下: 继承中方法的覆盖重写、概
继承中成员变量的访问特点: 成员变量不重名: 如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。代码如下: 成员变量重名: 如果子类父类中出现重名的成员变量,这时的访问是有影响的。代码如下: 子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量
继承中成员方法的覆盖重写_概念与特点 重写(Override) 概念:在继承关系当中,方法的名称一样,参数列表也一样 重写(Override):方法的名称一样,参数列表一样。覆盖。覆写 重载(Overload):方法的名称一样,参数列表不一样。 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法 继承中成员方法的覆
继承中成员方法的覆盖重写_应用场景 尽量不要修改,建议新建一个类,继承旧的,然后添加新的东西 对于已经有的功能,要想改的话,我们就覆盖重写 继承中成员方法的访问特点 继承关系中,父子类构造方法的访问特点: 1.子类构造方法当中有一个默认隐含的“super()"调用,所以一定是先
父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空 间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构 造方法调用时,一定先调用父类的构造方法。
当类之间产生了关系,其中各类中的构造方法,又产生了哪些影响呢? 首先我们要回忆两个事情,构造方法的定义格式和作用。 1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。 2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作
区分子类方法中重名的三种变量 局部变量: 直接写成员变量名本类的成员变量: this.成员变量名父类的成员变量: super.成员变量名 父类 public class Fu { int numfu =20; int num = 100; } 子类继承父类 public class Zi extends Fu{ int numZi = 20;
继承,是一种将类进行层级划分的概念。继承的基本思想是,在一个类的基础上,创造出一个新的类,这个类不仅继承了原来类的属性+方法,还可定制新的属性+方法。原来的类被称为父类,新的类被称为子类。 例如:公司有很多种类,(按照私企国企划分)有私营企业,国营企业。那么,公司就叫父类,私营企业和国营
目录 浅拷贝: 定义拷贝函数: 拷贝函数总结: 浅拷贝: Packet p1; Packet p2; p1 = new; p2 = new p1; 在创建p2对象时,将从p1拷贝其成员变量例如 interger,string和句柄等,这种拷贝方式称为浅拷贝(shallow copy)。 定义拷贝函数: 如果要拷贝对象,指的是首先创建一个新的对象(开辟
对象的三大特性的最后一个特性就是--多态 多态,同一方法名同时出现父类和子类中,为了使父类句柄指向子类对象的时候,也能调用子类的方法,故使用虚方法,在父类的方法名前加上 virtual 添加一个总结: virtual 最好添加到 最顶层(祖先),这样无论哪一层都可以使用 virtual 这个 特性 调用
一、设计模式之单一之责原则 定义 单一之责原则的定义是:有且仅有一个原因引起类或接口的变更。 反例 电话通话有4个过程:拨号、通话、回应、挂断,代码实现如下: public interface IPhone { // 拨通电话 void dial(); // 通话 void chat(); // 通话完毕、挂断电话 voi
所谓子类继承父类的成员变量作为自己的成员变量,就好像它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作,,也就是说,一个子类继承的成员应当是这个类的完全意义的成员,如果子类中定义的实例方法不能操作父类的某个成员变量,该成员变量就没有被子类继承;所谓子类继
继承父类并实现接口 使用接口的时候,需要注意: 1.接口是没有静态代码块或者构造方法的。 2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。 格式: public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB { /覆盖重写所有拍象方法 } 3.如果实现类所实现
方法的重写 重写都是方法的重写,和属性无关 非静态的方法可以重写 需要有继承关系,子类重写父类的方法! 1.方法名必须相同 2.参数列表必须相同 3.修饰符:范围可以扩大,不可以缩小 public > protected > Default > private 4.抛出的异常:范围,可以被缩小,但不能扩大:例:ClassNotFoundExceptio
成员变量重名 如果子类父类中出现重名的成员变量,这时的访问是有影响的。代码如下: class Fu { // Fu中的成员变量。 int num = 5; } class Zi extends Fu { // Zi中的成员变量 int num = 6; public void show() { // 访问父类中的num System.out.println("Fu num=" + num
继承的基本概念 面向对象的三大特征:封装,继承,多态 继承是多态的前提,没有继承就没有多态 原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问 师父会多少武功,大徒弟也都会,小徒弟也会 继承主要解决的问题就是:共性抽取 继承的特点: 1.子类可以拥有父类的内
面向对象编程 面向对象:先分类,然后使用面向过程思想具体实现每一个类的功能 * 适合复杂的多人协作的大型项目 面向过程:一步一步考虑怎样实现功能(线性) * 适合简单的项目实现 特性:继承,封装,多态 从认识角度:先有对象后有类 从代码角度: 先有类后有对象 本质:以类的方式组织代码,以
面向对象编程 Java的核心思想就是OOP 面向过程&面向对象 面向过程思想: 步骤清晰简单,第一步做什么,第二步做什么...... 面向过程适合处理一些较为简单的问题 面向对象思想 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最
一个方法是,Node 是父类,GNode,TreeNode 都是子类,在子类中定义一个父类结构体 成员函数的话,在父类中定义函数指针,对于不同的子类将他指向不同的函数 如果函数非常多可以再开函数表结构体 struct Node; struct Node{ int dis; void (*work)(); inline Node(){dis=INT_INF;} }; str