-
php require 在类的继承中的坑
2013-04-27 13:55:03对于php的文件调用,我们有时会为使用include, include_once, require, require_once而陷入斟酌,不仅初学者如此...至于四个函数的异同,在此不作赘述。 我们团队推崇使用的是require_once,为什么使用require_once对于php的文件调用,我们有时会为使用include, include_once, require, require_once而陷入斟酌,不仅初学者如此,高级工程是由也会有纠结的时候。而且至今使用哪一个为最优仍没有达成共识。每个团队每个项目有自己的代码规范,也有自己的使用理由。至于四个函数的异同,在此不作赘述。
我们团队推崇使用的是require_once,为什么使用require_once而不是require呢。今日给出一个理由。
require的使用在多个子类继承同一个父类时会引起redeclare的错误
因为require不是一个方法,而是一个语句块。所以,他把把引用的文件执行一遍,所以,如果你在一个文件里引用了两个继承自同一父类的类时,由会引起上述问题。而require_once则不会,它会先判断是否引用过,苦有则略过。
看代码,先写一个抽象父类:
<?phpabstract class AbstractClass{}AbstractClass.php
再实现两个子类:
RequireClassA.php <?php //使用require而不是require_once require 'AbstractClass.php'; class RequireClassA extends AbstractClass{ }
RequireClassB.php <?php //使用require而不是require_once require 'AbstractClass.php';class RequireClassB extends AbstractClass{}
实现调用:
test.php <?php require_once 'RequireClassB.php'; require_once 'RequireClassA.php'; $A = new RequireClassA(); $B = new RequireClassB();
运行test.php报错>php test.php >PHP Fatal error: Cannot redeclare class AbstractClass in /home/john/workspace/php/require/AbstractClass.php on line 2
-
IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)
2016-10-19 10:50:50在 IntelliJ IDEA 中这个查看一个类也就是当前类的所有继承关系,包括实现的所有的接口和继承的类, 这个继承,不仅仅是一级的继承关系,包括好几层的继承。父类的父类的父类。直到最后。 可以很清楚明了的了解一个...IntelliJ IDEA使用教程 (总目录篇)
在 IntelliJ IDEA 中这个查看一个类也就是当前类的所有继承关系,包括实现的所有的接口和继承的类,
这个继承,不仅仅是一级的继承关系,包括好几层的继承。父类的父类的父类。直到最后。
可以很清楚明了的了解一个类的实现关系。
diagram 英[ˈdaɪəgræm] 美[ˈdaɪəˌɡræm]
n. 图表; 示意图; 图解; [数] 线图;
vt. 图解; 用图表示;下面看这个编辑器怎么以图解的形式,查看这种继承关系。
(上面的是查看的Java源码的类的所有继承关系,最下面的这个是在查看spring项目里面的一个类的继承关系的时候,可能会有spring关系图,这个spring关系太复杂了,简直跟蜘蛛网一样,还是就看看各个类的继承图就可以啦。)
更新:这个地方是有放大镜功能哦。我也是意外发现的,具体看图。
20170508,追加;
看了楼下的评论,还真的有个uml插件,然后,就看下面的截图,要是你们是社区版的,看看下载了这个插件之后,能不能用?
2017/08/01追加
上面示范的是如何向上看----看一个类的继承关系;
下面再看看,怎么向下看,-----看一个类的子类实现关系。
先看下map接口的实现类,哇赛赛,600多个。
这个so far。我上面截图理解的有点问题,不是没找到,是暂时没有继续扩展,因为jdk也是一直在发展的,所以,这个map接口的实现类,以后只会多,不会少的。所以,他这个地方的so far ,就目前为止,也许再过些年,六千个也是可能的。
再看个少点的。
这个是我们自己写的一个类,他有四个类继承了这个类。这个少。
那么快捷键是啥呢?
我这个就是告诉你,怎么在你的电脑上,找到你自己对应的快捷键。我这是Ctrl + T。不知道你那是啥。
我写完文章,给自己点个赞,不过分吧,
不过分,那我可就点啦啊。
我先点为敬,你们随意。大家随意。不要客气。。。 -
python中类的继承规则
2020-05-23 14:45:55python中类的继承规则 在学习python中的继承规则之前,首先要知道python中类的划分。 只要继承object类的就是新式类,不继承object类的都是经典类。 在python3中,所有的类都继承object类,都是新式类。 在python2中...python中类的继承规则
在学习python中的继承规则之前,首先要知道python中类的划分。
只要继承object类的就是新式类,不继承object类的都是经典类。
在python3中,所有的类都继承object类,都是新式类。
在python2中:
class A:pass 经典类
class B(object):pass 新式类
在python3中:
class A:pass 新式类
class B():pass 新式类
经典类的多继承采用深度优先继承。
新式类的继承采用广度优先继承。
在新式类中,可以试用类名.mro()查看继承的顺序。一、简单继承
class A(): def run(self): print("A类 执行") class B(A): pass class C(A): pass class D(B,C): pass print(D.mro()) #DBCA
二、复杂继承
class A(): def run(self): print("A类 执行") class B(A): pass class C(B): pass class D(C): pass class E(B): pass class F(D,E): pass print(F.mro()) #FDCEBA
三、复杂类多继承
class A(): def run(self): print("A类 执行") class B(A): pass class C(A): pass class D(B): pass class E(C): pass class F(D,E): pass print(F.mro()) #FDCEBA
C3算法计算继承顺序:
F(D,E)=mergo(D(B),E©)
=[F] +[DBAO] +[ECAO]
FDB = [AO]+[ECAO]
FDBEC = [AO]+[AO]
FDBECA = [O]
FDBECAO四、案例练习计算继承顺序
class A(): def run(self): print("A类 执行") class B(A): pass class C(): pass class D(B): pass class E(C): pass class F(D,E): pass print(F.mro()) """ F+DBAO+ECO FDBAECO """
-
python中类的继承
2019-06-05 17:34:41# 在程序中,继承描述的是多个类之间的所属关系。 # 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。 # 那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。 # 继承的作用:类B...# 在程序中,继承描述的是多个类之间的所属关系。 # 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。 # 那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。 # 继承的作用:类B通过继承 能够使用类A的方法和属性; ### 类A的定义: class A(object): pass #### 单继承:子类只继承一个父类 # 类B 只继承了 一个父类(类A) # 那么类B的定义: class B(A): pass #### 多继承:子类继承多个父类 # 类B 继承了 类A和类C # 那么类B的定义: class B(A,C): pass ########### 例子 ############### class A(object): # 方法 def a_func1(self): print("a_function1") class C(object): # 方法 def c_func1(self): print("c_function1") class B(A, C): # 方法 def b_func1(self): print("b_function1") # 给类B实例化一个对象 john = B() #类B 自己的方法 john.b_func1() #继承 类A的方法 john.a_func1() #类B继承了类A,所以能够直接使用类A的方法 #继承 类C的方法 john.c_func1()
-
Python中类的继承、多层继承和多继承
2019-06-05 15:03:45Python中类的继承、多层继承和多继承 Python中,一个类可以通过继承的方式来获得父类中的非私有属性和非私有方法。 一、继承、重写、和调用重写的父类方法 继承的语法为在类名后的小括号()中写入要继承的父类名,... -
在JAVA中阻止类的继承
2004-10-20 10:35:00在JAVA中阻止类的继承(官方和非官方办法)By Usman Saleem在面向对象的理论中, 有一些方案要求你用一个办法来声明一个不可继承的类。一般而言,如果类提供的功能不应该被改变,或者更恰当的说,是被覆盖(override... -
c++在类中继承基类过多导致冲突的解决方案
2016-08-23 16:01:50在实际的项目过程中某个类有时候很可能我们会继承多个基类,这个时候就会容易造成冲突,但是这些基类我们又必须要使用,不可能说将冲突的基类给删掉,这个时候我们改怎么办呢?这里有一个比较简单的解决方案, 就是... -
C++中类的多继承
2015-07-19 23:07:43在写这一主题的文章之前,在网上找到一篇很非常好的文章...类C会同时拥有类A和类B的特性(属性和方法,也就是两个类的所有成员)。这种方式很简单这里就不多说,主要讲下面这种方式。2. 复杂版本 同样的,这个结构中 -
java 类的继承(继承中的关键字)
2015-09-18 15:13:34使用this()调用本类中的另外的构造方法如果调用super,必须写在子类构造方法的第一行 如果子类的构造方法没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法如果子类构造方法中既没有显示... -
C++类的公有/私有继承,基类的私有成员在派生类中访问情况
2018-12-29 10:58:09首先,基类的私有成员是会被派生类继承的,但是不能被派生类访问;...对于基类private类型的成员变量,无论是公有继承还是私有继承,在派生类中定义的成员函数都不能直接访问基类的私有成员,只能通过基类的... -
java中类的继承
2007-04-12 23:48:004.在Java中,一个类只能继承继承一个父类,这种方式叫做单继承。这一点和C++不一样。5.java.lang.Object类是所有类的父类虽然一个类只可以继承一个父类,但是一个父类却可以被多个子类所继承。从子类的角度看,它 -
IntelliJ IDEA查看 1.类中方法 2.类继承关系 3.类的继承关系图
2019-07-17 10:43:05Intellij IDEA笔记(四):在IDEA中,我们可以通过(选中类名)快捷键Alt + 7或者(选中类名/打开后在类中)Ctrl + F12来查看类下面有哪些方法/变量 2.我们可以通过快捷键Ctrl + H,查看类/接口的继承关系 3.继承... -
python中类的继承与方法重写
2016-06-21 18:01:561:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。 2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上... -
浅谈C++类中的三大继承方式:公有继承、私有继承、保护继承
2018-05-30 22:14:00派生类继承了基类的全部数据成员和除了构造函数、析构函数之外的全部函数成员,但是,这些成员的访问属性在派生过程中是可以...类的继承方式有:公有继承、私有继承、保护继承当类的继承方式为公有继承时:基类的p... -
C#中类的继承与多态
2014-05-16 16:07:03为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总是希望能够利用前人或...使用继承可以在类之间建立一种相交关系,使得新定义的类继承已有的类的特征和能力,而且可以加入新的特性或者修改已有 -
在继承关系中子类可以继承父类的那些属性和方法
2019-07-30 10:11:42在继承关系中,子类可以继承父类的public 属性和方法,可以继承protected属性和方法,如果子类和父类在同一个包中,则父类默认访问修饰符属性和方法也是可以被子类继承的。父类的构造函数不能继承 访问修饰符 ... -
C++中类的继承和组合
2014-06-22 00:46:00C++中类的组合 ※组合的概念 ×类中的成员是另一个类的对象。 ×可以在已有的抽象的基础上实现更加复杂的抽象。 通过对复杂对象进行分解、抽象,使我们能够将一个复杂对象理解为简单对象的组合。分解... -
在MyEclipse中,如何查看类中的成员及继承过来的成员
2015-02-08 11:18:07点击一次:ctrl+o,显示类中的成员, 在点击一次ctrl+o,显示父类继承过来的成员, 在点击一次取消显示父类继承过来的成员。 -
python3中类的重点与难点:类继承中的私有属性和私有方法
2018-03-21 08:47:53在继承中,如果调用的是继承父类的公有方法,可以在公有方法中访问父类中的私有属性和私有方法;但是如果子类中实现了一个公有方法,那么这个方法是不能够调用继承父类中的私有方法和私有属性。 打个比方:你父亲... -
jaxb中的类继承
2015-11-22 13:18:03jersey中的@Produces(“application/xml”)是由jaxb来负责处理的,只要项目中引入了jaxb-api-2.2.7.jar....单个类你只要在类上加入@XmlRootElement注解,jaxb会把它换成xml输出。@XmlRootElement public class Addre -
python类变量和实例变量在继承中如何取值
2018-06-14 13:09:55python类变量在继承中取值方法如下: 1,如果一个变量的名字在当前类中没有,将搜索父类直到被引用的变量名被找到,多继承时会按照继承顺序依次找,如果一直到最顶级都没有找到,会引发一个 AttributeError 异常 。 ... -
动物类的继承
2018-04-24 18:25:53动物类的继承 要求: 1.在一个名为Test.java的文件中定义四个类:动物类Animal,狗类Dog和猫类Cat继承Animal,测试类Test,要求编写代码的同时编写简单注释。 2.动物类Animal要求体现以下内容: (1) 私有成员... -
Python类的继承实例
2019-07-31 14:45:08类的继承可以看成对类的属性和方法的重用,能够大大的减少代码量,继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹。 通过继承创建的新类为子类... -
在c++中如何阻止类被继承
2014-11-22 17:33:30这个话题是源自于一个面试题,我在网上查了一下有不少这方面的解说!...那么在阻止类被继承的时候,我们需要用到这个技巧。其次,阻止类被继承还需要使用private来控制继承的基类。 namespace Sample -
类继承中super的使用
2015-08-19 00:00:48例如:父类Person中一个字段age,在子类Student中使用age, this.age, super.age来访问age是完全一样的。当然,不能使用super访问子类中的添加的域和方法。 有时需要使用super以区别同名的域和方法使用super可以 -
python 类的继承,类中的函数调用以及类输入数组
2018-05-29 09:30:37class People(): #定义类,要大写,python 2中要在括号里加如object这个单词 def __init__(self,n,a,w): #定义一个方法(类下的函数都称为方法),初始化形参(属性) self.name = n self.age = a self.... -
Python中如何在继承的类中调用基类的方法
2016-03-24 16:37:00可以使用super()这个BIF函数例:class Derived(Base): def meth(self): super(Derived,self).meth() -
idea中查看类的继承关系图
2017-06-28 17:06:00在指定类右键查看diagram 也可以使用快捷键ctrl+alt+u,更快捷 好处:可以看向上的继承关系 缺点:既能看继承关系,也能看实现了哪些接口 然后可以看到如下界面,按住alt键可以使用放大镜功能哦~ ... -
Android Studio中查看类的继承关系
2014-07-24 23:45:11查看类的继承关系的快捷键F4,在Android Studio常用快捷键这篇文章中,有写了。今天主要是讲一些关于这个快捷键出来的界面的一些配置,这块功能相对偏冷一些,可能很多人都会用不到。但是关于这些配置,android ... -
C++ 类的继承,基类中的构造函数是谁在调用?
2012-10-23 02:19:421. 如果父类Animal 中的构造... 任何一个类的构造函数 不可以是 protected or private ,除非它不需要构造对象,只要需要构造对象就必须设置为public. 2. 父类 Animal, 子类 Bird从父类中继承而来,不管是publ