精华内容
下载资源
问答
  • 对任何一个父类调用__init__都不会改变继承结构,不。您只是在更改创建实例时除了C.__init__之外还运行什么初始化器方法。C同时继承{}和{},并且由于继承顺序的不同,{}的所有方法都被{}上的方法所遮蔽。在如果...

    对任何一个父类调用__init__都不会改变类的继承结构,不。您只是在更改创建实例时除了C.__init__之外还运行什么初始化器方法。C同时继承{}和{},并且由于继承顺序的不同,{}的所有方法都被{}上的方法所遮蔽。在

    如果需要根据构造函数中的值更改类继承,请创建两个不同结构的独立类。然后提供另一个可调用的API来创建实例:class CA(A):

    # just inherit __init__, no need to override

    class CB(B):

    # just inherit __init__, no need to override

    def C(path):

    # create an instance of a class based on the value of path

    class_map = {'A': CA, 'B': CB}

    return class_map[path](path)

    API的用户仍然有名称C()来调用;C('A')从C('B')生成一个不同类的实例,但它们都实现了相同的接口,因此这对调用者来说并不重要。在

    如果有一个公共的'C'类在isinstance()或issubclass()测试中使用,则可以混合使用一个,并使用^{} method重写返回的子类:

    ^{pr2}$

    调用__new__来构造新的实例对象;如果__new__方法返回该类的实例(或其子类),则将自动对该新实例对象调用__init__。这就是为什么C.__new__()返回CA.__new__()或CB.__new__();__init__的结果。在

    后者演示:>>> C('A').something()

    Function A

    >>> C('B').something()

    B function with something

    >>> isinstance(C('A'), C)

    True

    >>> isinstance(C('B'), C)

    True

    >>> isinstance(C('A'), A)

    True

    >>> isinstance(C('A'), B)

    False

    如果这两个选项都不适用于您的特定用例,则必须在C上的新somemethod()实现中添加更多路由,然后根据self.path调用A.something(self)或{}。当您必须对每个方法都执行此操作时,这会很快变得非常麻烦,但decorator可以在这方面提供帮助:from functools import wraps

    def pathrouted(f):

    @wraps

    def wrapped(self, *args, **kwargs):

    # call the wrapped version first, ignore return value, in case this

    # sets self.path or has other side effects

    f(self, *args, **kwargs)

    # then pick the class from the MRO as named by path, and call the

    # original version

    cls = next(c for c in type(self).__mro__ if c.__name__ == self.path)

    return getattr(cls, f.__name__)(self, *args, **kwargs)

    return wrapped

    然后在类的空方法上使用该方法:class C(A, B):

    @pathrouted

    def __init__(self, path):

    self.path = path

    # either A.__init__ or B.__init__ will be called next

    @pathrouted

    def something(self):

    pass # doesn't matter, A.something or B.something is called too

    然而,这变得非常不和谐和丑陋。在

    展开全文
  • <p>I feel dumb for having been a web programmer for so long and not knowing the answer to this question, I actually hope it's possible and I just didn't know about rather than what I think is the ...
  • 1、接口可以继承接口,抽象类不可以继承接口,但可以实现接口。 2、抽象类可以继承实体类。...4、一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class ...

    1、接口可以继承接口,抽象类不可以继承接口,但可以实现接口。

    2、抽象类可以继承实体类。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

    3.抽象类可以继承实体类,就是因为抽象类的可以继承性和有方法。

    4、一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类,不能继承多个类 class B extends A{} 在继承类的同时,也可以继承接口: class E extends D implements A,B,C{} 这也正是选择用接口而不是抽象类的原因。

    展开全文
  • 我一直在想一个事:Java只能继承一个类,那么C++为什么就能继承多个类呢 ……不想了,打把吃鸡!See you! ……不行!还是自己研究下! 我对队友说:有队友逃跑或加入竞赛失败,你们可以在飞机起飞前安全退出,不影响...

    前言
    我一直在想一个事:Java只能继承一个类,那么C++为什么就能继承多个类呢
    ……不想了,打把吃鸡!See you!
    ……不行!还是自己研究下!
    我对队友说:有队友逃跑或加入竞赛失败,你们可以在飞机起飞前安全退出,不影响任何屁事。只听见队友应了声:TM的老子差3分上王牌!
    哼,差3分上王牌,不知道人家从王牌升到了星钻呢


    1.我是来凑字数的
    自己在Java写了一个程序,然后在C++写了一个程序
    Java:

    package XXX;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class Abc extends JFrame {
    	public static void main(String [] args){
    		Abc a =new Abc();
    	}
    	
    	public Abc(){
    		this.setSize(350,240);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);
    	}
    }
    

    C++:

    #include<iostream>
    using namespace std;
    class Abc
    {
    	public:
    		Abc()
    		{
    			cout<<"I'm Talking now.";
    		}
    };
    class aBC
    {
    	public:
    		aBC()
    		{
    			cout<<"I'm also Talking now.";
    		}
    };
    class AbC :public Abc,public aBC//继承
    {
    	//TODO
    };
    int main()
    {
    	AbC a();
    	return 0;
    }
    

    2.看看两个程序的优缺点
    Java程序:
    优:容易实现、扩展
    缺:只能单继承、父类修改后子类也要修改。


    C++程序:
    优:可以实现多继承、扩展性可提高、父类与子类相似但又不同
    缺:灵活性降低
    严重缺点:
    1.程序猿其实根本用不上它
    对于C++多继承,到现在还是有争议的,所谓C++之父云:“我创造了这门语言,可我还没有完全掌握它”
    2.容易混淆
    如果调用基类的基类中的方法,容易造成歧义
    3.无用处
    一般的Java都是一个继承完事,碰到相对复杂的也是使用大量的接口而不是多继承


    所以C++的多继承实际不靠谱!
    只不过画蛇添足而饮酒晚矣!

    展开全文
  • java 一个接口可以继承多个接口吗

    千次阅读 2018-06-19 14:36:33
    Interface3 Extends Interface0, Interface1, interface……不允许多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承....

    接口是常量值和方法定义的集合。接口是一种特殊的抽象类。

    java类是单继承的。classB Extends classA

    java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……

    不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?

    但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。

    注意:

    1)一个类如果实现了一个接口,则要实现该接口的所有方法。

    2)方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。

    3)因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。



    以上内容转自:http://blog.csdn.net/tiantiandjava/article/details/46514783

    end

    -----------------------------------------------------------------------------------------------------

    注:作者 望穿秋水见伊人

    展开全文
  • 答:Object-c的类不可以多重继承可以实现多个接口(协议),Category是类别,重写一个类的方式一般用分类更好,仅仅对分类有效,不会影响到其他类与原有类的关系。category的主要作用是为已经存在的类添加方法.除...
  • 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类,不能继承多个类 class B extends A{} 在继承类的同时,也可以继承接口: class E extends D implements A,B,C{} 这也正是选择用接口而...
  • 一个java类不可以多个父类,只可以有1个父类。Java类只支持单继承,不支持多继承,所以只可以有...Java中父类的意思是:某一个类B继承了类A则说A是B的父类。继承后B拥有A所有的公开方法和属性。Java是一门面向对象...
  • 一、接口类(面向对象开发的思想和规范)的...其他两个tiger类和hawk类则不能满足(b)而以下代码确切定义每一个类,每个类的属性都都在类里面存在,这样写虽然可以满足前面的需求,但是不好的地方就是,重复的方法...
  • Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行...
  • Interface3 Extends Interface0, Interface1, interface……不允许多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承....
  • 如果一个类之中只是由抽象方法和全局常量所组成的,那么在这种情况下不会将其定义为一个抽象类,而只会将其定义为接口,所以所谓的接口严格来讲就属于一个特殊的类,而且这个类里面只有抽象方法与全局常量。...
  • 一、接口类(面向对象开发的思想和规范)的...其他两个tiger类和hawk类则不能满足(b)而以下代码确切定义每一个类,每个类的属性都都在类里面存在,这样写虽然可以满足前面的需求,但是不好的地方就是,重复的方法...
  • 不想继承父类的某个方法,就自己重写一个一样名称的方法执行父类中方法:1--> super(子类, self).父类方法(参数) # 标识明确,比较常用;2--> 父类名.父类方法(self, 参数)2、多继承(无__...
  • 一个类可以实现多个接口:class D implements A,B,C{}。但是一个类只能继承一个类,不能继承多个类:class B extends A{}。在继承类的同时,也可以继承接口:class E extends D implements A,B,C{}。 接口的使用原则...
  • 一个匿名内部类一定是继承一个类或者实现一个接口,new了这个父类或接口名的内部类还带内容,我就想问能不能还能不能继承其他类或实现其他接口。 如果我表达不好,不好理解, 那问题简化就是 匿名内部类能不能...
  • String类可以继承吗?我们来聊聊final关键字! String在java基础知识中绝对是个重点知识,关于String的一些问题也是非常的,而且牵涉到内存等高级知识,在面试中也是经常被考察的一个点,那么我们今天就来...
  • 接着上篇的基础知识,今天俺们来学习一下:面向对象(万物皆对象)三大特征(封装、继承、多态)接口接口 概述:接口是种引用数据类型,是方法的'集合',接口的内部主要是定义方法,包含常量、抽象方法(JDK7及以前)...
  • interface可以多继承

    2019-02-26 10:54:43
    几天前被一个面试官虐成狗,上来问住我的第一个问题是,interface1 extends ...java明明说好的不支持多继承,class可以通过implement多个Interface来间接实现多继承,但是Interface怎么implements多个接口呢。这是个...
  • 重写一个类的方式是继承好还是分类好?为什么? Object-C不支持多继承。我们可以通过ios中无处不在的@protocol委托方式来实现。协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由...
  • Java 接口是否可以继承多个接口? 我们都知道,Java是单继承,那接口可以多继承吗? 答案是:Java 接口是可以继承多个接口的 Java不允许多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何...
  • 一个类中不能有两个构造函数.构造函数必须命名为__init__.并且,与Java不同,Python不允许通过其参数类型重载函数或方法.所以,如果你有两个构造函数,它们都是相同的函数.有几种方法可以解决这个问题.使用@classmethods...
  • 慕后森Python没有隐私模型,没有像C ++,C#或Java这样的访问修饰符。没有真正的“受保护”或“私有”属性。带有前导双下划线但无尾随双下划线的名称将被重编,...通过在此类名称前添加一个额外的下划线和名称(无...
  • 一个类是base.Base,存在./path1/base/路径下,第二个类是sub.Sub,存放在./path2/sub/路径下,Sub继承了Base。源代码如下: <code class="language-java">package base; public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 442
精华内容 176
关键字:

一个类可以继承多个类吗