首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】泛型编程 ⑧ ( 类模板继承语法 | 普通类 继承 类模板语法 | 类模板 继承 类模板语法 | 继承类模板必须指定具体的类型参数列表 | 继承 类模板 必须重写构造函数 )

一、普通类 继承 类模板语法 1、普通类 继承 类模板语法 类模板 作为父类 , 子类 继承 类模板 父类 , 需要 指定 具体的类型参数列表 ; 需要 重写 构造函数 , 其中必须调用 类模板 具体类...的 子类 : // 类模板 继承时 , 需要具体化 类模板 // 也就是 指定 类模板 的 类型参数列表 , 将 泛型类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 父类占用内存大小..., 类模板子类 与 普通类子类 区别就是 , 类模板子类 需要在尖括号中指定 具体的 类型参数列表 的 数据类型 ; 此时 , 在继承时 , 被继承的 类模板 必须 声明 类型参数列表 , 将具体的泛型类型写在尖括号中..., C++ 编译器需要知道 具体的 数据类型 是什么 , 才能生成 具体的类 , 只有这样 , 将具体的数据类型固定下来 , C++ 编译器 才能知道 父类 所占的 内存大小 , 才能正确分配内存 ;...二、类模板 继承 类模板语法 1、类模板 继承 类模板语法 普通类 继承 类模板时 , 需要指定 类模板 的具体 参数类型 , 下面代码中的 具体类型就是 int ; class Son : public

1.1K31

编程思想 之「接口、内部类」

在接口中,则不允许含有非抽象的方法!因此与抽象类相比,接口可以称之为“更加纯粹的抽象类”。接口也可以包含域,只不过这些域隐式地、自动的是static和final的。...在这里,细心的同学可能会意识到:匿名内部类,实际上就是继承了方法返回(类)类型的类而已。...如果不需要内部类对象与外围类对象之间有联系,那么可以将内部类声明为static类型,这就是我们所说的嵌套类。...而且,内部类允许继承多个类或者抽象类。当然,我们也可以继承内部类,不过在继承内部类的时候,那个指向外围类的“隐式的”引用必须被初始化,而在导出类中不再存在可以连接的默认对象。...此外,在继承内部类的时候,还有一点需要特别注意,那就是:我们不能在导出类中使用默认的构造器(不能编译),需要新建一个带有所继承的内部类所在外部类参数类型的构造器并显示调用外部类构造器的构造器。

31320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编程思想 之「接口、内部类」

    在接口中,则不允许含有非抽象的方法!因此与抽象类相比,接口可以称之为“更加纯粹的抽象类”。接口也可以包含域,只不过这些域隐式地、自动的是static和final的。...在这里,细心的同学可能会意识到:匿名内部类,实际上就是继承了方法返回(类)类型的类而已。...如果不需要内部类对象与外围类对象之间有联系,那么可以将内部类声明为static类型,这就是我们所说的嵌套类。...而且,内部类允许继承多个类或者抽象类。当然,我们也可以继承内部类,不过在继承内部类的时候,那个指向外围类的“隐式的”引用必须被初始化,而在导出类中不再存在可以连接的默认对象。...此外,在继承内部类的时候,还有一点需要特别注意,那就是:我们不能在导出类中使用默认的构造器(不能编译),需要新建一个带有所继承的内部类所在外部类参数类型的构造器并显示调用外部类构造器的构造器。

    1.2K110

    一文搞清楚Java中的包、类、接口

    Java中的类 Java中有个从1995年就喊出的口号“一切皆对象”,而对象在程序中的具象就是通过类(class)来实现!...静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它 静态嵌套类仅能访问外部类的静态成员和方法 在静态方法中定义的内部类也是静态嵌套类,这时候不能在类前面加static关键字 class...2、与外部类无关,独立继承其他类或实现接口 3、内部类提供了Java的"多重继承"的解决方案,弥补了Java类是单继承的不足 4、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class...接口与抽象类的区别 1、抽象类可以有构造方法;接口中不能有构造方法(因为不允许直接实例化)。 2、抽象类中可以有普通成员变量;接口中没有普通成员变量。...4、抽象类中的抽象方法的访问权限可以是 public、protected 和 default;接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。

    13800

    java到底和C++有啥区别?

    它采取的无条件跳转机制是“break 标签”或者“continue 标准”,用于跳出当前的多重嵌套循环。 (23) Java采用了一种单根式的分级结构,因此所有对象都是从根类Object统一继承的。...这意味着同一个包里的其他元素也可以访问它(相当于它们都成为C++的“friends”——朋友),但不可由包外的任何元素访问。...(28) 嵌套的类。在C++中,对类进行嵌套有助于隐藏名称,并便于代码的组织(但C++的“命名空间”已使名称的隐藏显得多余)。...通过在C++中设定基础类的作用域,我们可访问位于分级结构较深处的方法。亦可用super关键字调用基础类构建器。正如早先指出的那样,所有类最终都会从Object里自动继承。...和C++不同,不存在明确的构建器初始化列表。但编译器会强迫我们在构建器主体的开头进行全部的基础类初始化,而且不允许我们在主体的后面部分进行这一工作。

    1.5K60

    Java编程思想精粹(九)-接口

    否则,它们只有包访问权限,这样在继承时,它们的可访问权限就被降低了,这是 Java 编译器所不允许的。...Java 在设计之初,C++ 的多继承机制饱受诟病。Java 过去是一种严格要求单继承的语言:只能继承自一个类(或抽象类),但可以实现任意多个接口。...因为接口中仍然不允许存在属性(只有静态属性),所以属性仍然只会来自单个基类或抽象类,即不会存在状态的多继承。...你可能猜测它只是被用来实现一个 private 内部类,实现 private 接口是一种可以强制该接口中的方法定义不会添加任何类型信息(即不可以向上转型)的方式。...恰当的原则 优先使用类而不是接口。从类开始,如果使用接口的必要性变得很明确,那么就重构。 接口是一个伟大的工具,但它们容易被滥用。

    52021

    Java编程思想精粹(On Java8)(十)-接口

    否则,它们只有包访问权限,这样在继承时,它们的可访问权限就被降低了,这是 Java 编译器所不允许的。...Java 在设计之初,C++ 的多继承机制饱受诟病。Java 过去是一种严格要求单继承的语言:只能继承自一个类(或抽象类),但可以实现任意多个接口。...因为接口中仍然不允许存在属性(只有静态属性),所以属性仍然只会来自单个基类或抽象类,即不会存在状态的多继承。...你可能猜测它只是被用来实现一个 private 内部类,实现 private 接口是一种可以强制该接口中的方法定义不会添加任何类型信息(即不可以向上转型)的方式。...恰当的原则 优先使用类而不是接口。从类开始,如果使用接口的必要性变得很明确,那么就重构。 接口是一个伟大的工具,但它们容易被滥用。

    43520

    不清楚Java内部类的编译原理?读完这篇就够了

    ,创建某个内部类的对象,那么需要通过外围类引用,具体的指明这个对象的类型:OuterClassName.InnerClassName。...举例子3:静态内部类的创建 /** * * 静态内部类:声明为static的内部类 * 不需要外围类的对象即可以创建嵌套类 * 嵌套类对象不可访问非静态的外围类对象...与普通的内部类还有一个区别:普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段, 也不能包含嵌套类。但是在嵌套类里可以包含所有这些东西。...内部类与外围类的继承机制 外围类A继承了外围类B的内部类,需要注意需要指明继承关系,否则编译器会报错:“No enclosing instance of type 'innerClass.test10....但是相比较C++的多重继承(事实证明非常难以使用),Java 的接口和内部类就相对容易理解了。

    42720

    Java 内部类的意义及应用

    众所周知,我们的 C++ 程序语言是多继承制的,而多继承明显的好处就是,相对而言只需要写较少的代码即可完成一个类的定义,因为我们可以通过继承其它类来获取别人的实现。...当然,C++ 通过 virtual 关键字以虚拟继承的方式解决了这个问题,具体细节大家可以自行参照 C++ 的语法进行了解。...但是,Java 从一开始就觉得 C++ 的多继承会是一个「麻烦」,所以 Java 是单根继承机制,不允许多继承。...,而你从外部越过外围类而单独创建内部类的实现显然是不符合面向对象设计思想的。...其实你从编译器的层面上看,匿名内部类和一个实际的类型相差无几,它也能继承某个类并重写其中方法,实现某个接口的所有方法等。最吸引人的可能就是它无需单独创建类文件的简便性。

    1.1K40

    Effective-java-读书笔记之类和接口

    , 子类中的访问级别就不允许低于超类中的访问级别....Java类库中的String的可变配套类是StringBuilder和StringBuffer.为了让类不能被继承, 除了使类成为final的外, 还有一种方法: 让类的所有构造器都变成私有的或者包级私有的..., 或者包级私有的, 并增加一些公有的静态工厂来替代构造器.第20条 接口优于抽象类抽象类和接口的区别:抽象类允许包含某些方法的实现, 接口则不允许....(从Java 8开始接口也可以包含默认方法了.)抽象类需要继承(Java只允许单继承), 但是可以实现多个接口.使用接口的好处:现有的类可以很容易被更新, 以实现新的接口.接口是定义混合类型(mixin...方法行为若不依赖于标签值, 就把方法放在抽象类中.所有方法都用到的数据域放在抽象类中, 特定于某个类型的数据域放在对应的子类中.这个类层次纠正了前面所提到的标签类的所有缺点.第24条 优先考虑静态成员类嵌套类

    71671

    Kotlin中级(9)- - - Kotlin类之数据类、密封类、内部类.md

    什么是受限的类继承结构 所谓受限的类继承结构,即当类中的一个值只能是有限的几种类型,而不能是其他的任何类型。 这种受限的类继承结构从某种意义上讲,它相当于是枚举类的扩展。...也可以说成,密封类是包含了一组受限的类集合,因为里面的类都是继承自这个密封类的。但是其和其他继承类(open)的区别在,密封类可以不被此文件外被继承,有效保护代码。...从声明类上看,继承的两个类单独声明,子类通过(子类:父类)继承父类,而内部类必须声明在外部类里面,并且用关键字inner标记 从访问上看,继承的父类不能直接访问子类,外部类可以通过“外部类().内部类...()”访问内部类,继承的子类能直接访问父类公开的成员属性及方法,而内部类值能通过this@外部类的方式访问外部类的属性和方法 从能否覆盖上看,继承的子类能覆盖父类用open标记的属性和方法,内部类不能覆盖外部类的属性和方法...从定义对象的方法看,继承的子类定义为val/var son = Son(),内部类的定义为 val/var inter = Outer().Inter()

    1.2K20

    Kotlin学习日志(五)类与对象

    ,然后在实现该接口的具体类中重写这几个方法,从而间接实现类似C++多重继承的功能。...四、特殊类 4.1 嵌套类 一个类可以在单独的代码文件中定义,也可以在另一个类内部定义,后一种情况叫作嵌套类,即A类嵌套在B类之中,听起来和Java的嵌套类是一样的,但其实有所差别,Java的嵌套类允许访问外部类的成员...,而Kotlin的嵌套类不允许访问外部类的成员,强行访问则会报错。...4.2 内部类 Kotlin限制了嵌套类不能访问外部类的成员,那还有什么方法可以实现此功能呢?...针对该问题,Kotlin另外增加了关键字inner表示内部,把inner加在嵌套类的class前面,然后嵌套类就变成了内部类,所以Kotlin的内部类就相当于Java的嵌套类,而Kotlin的嵌套类则是加了访问限制的内部类

    1.2K20

    《Java核心技术 卷I:基础知识》读书笔记

    与之对应,调用的方法依赖于隐式参数(this)的实际类型,这种方式称为动态绑定。 5.1.4 阻止继承 不允许扩展的类称为final类 类中特定方法也可以声明为final,这样子类就不能覆盖这个方法。...使用继承实现"is-a"关系 除非所有继承的方法都有意义,否则不要使用继承 在覆盖方法时,不要改变预期的行为 使用多态,而非类型信息 不要过多地使用反射 第6章 接口与内部类 6.1 接口 接口不是类...当想要使用一个回调函数而又不想编写过多代码时,可以使用匿名内部类。 C++使用的是嵌套类。嵌套时类之间的关系而并不是对象之间的关系。对于一个嵌套类,可能并不会实现嵌套内的类。...而内部类中里面的类会有一个隐式引用,指向实例化该内部对象的外围类对象,因此会很有意思。 static内部类则没有这种附加指针,与C++的嵌套类类似。...这个引用在内部类中是不可见的(类似于外部嵌套的块作用域) 这个步骤是编译器自动在构造器中完成的(不太清楚,可能需要自行进行实验) 6.4.2 内部类的特殊语法规则 从正规来说,外围类引用的语法是比较复杂的

    59320

    java内部类深入详解 内部类的分类 特点 定义方式 使用

    本文关键词: java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内部类...内部类的覆盖情况 两个类之间的继承和他们各自的内部类没有关系,不存在覆盖的情况 两个类之间的继承关系  比如  B extends A  ,每个类中都有C这个内部类 他们两者中的C是没有什么关系的...A的C 当创建b.new C(); 的时候使用的是B的C 显然, 创建内部类对象时,到底是父类中的还是子类中的  是由:   .new 前面的类型决定的,也就是定义的类型,而不是实际指向的类型 多层嵌套的内部类...,不管有几层,内部类,可以访问到他外面的所有的类的属性信息 接口中的内部类 一般情况下 接口中不允许放置任何代码,但是嵌套类可以作为接口的一部分 你放到接口中的任何类都自动的是public 和 是 static...的 因为类是static,只是将嵌套类置于接口的命名空间内,并不违反接口的规则 你甚至可以接口中的内部类实现外部接口 如果你想要创建某些公共代码,使得他们可以被某个接口的所有不同实现所共用 那么使用接口内部的嵌套类会显得很方便

    49110

    Java学习笔记

    ) { Outer outer=new Outer(); Outer.Inner inner=outer.new Inner(); inner.doStuff(); } } //方法中定义的内部类嵌套类并非只能在类里定义...比如,在方法中,或甚至在for循环体内部,都可以定义嵌套类,例如: //该变量尽管是在一个方法中被定义,但是却不能被访问,因此在方法中定义的内部变量类中能访问方法中的final类型的局部变量,因为用final...*通过继承可简化类的定义 *java只支持单继承不允许多重继承 *可以有多层继承,即一个类可以继承某一个类的子类,如B继承了类A,类C又可以继承类B,那么类C也间接继承了类A *子类继承父类所有的成员变量和成员方法...接口是抽象方法和常量值的集合,从本质上讲 接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现 *接口中的成员都是public访问类型的。...: //类与继承实例 //继承的特点:可以简化类的定义,java中只支持单继承不允许多重继承 class Person { public final String x; //定义为final的常量除了在此处和构造函数中赋初值外

    6510

    【笔记】《C++Primer》—— 第19章:特殊工具与技术

    这一章介绍了平时可能不太会用到的C++特性,内容比较杂。其中有类似枚举,联合,局部类这样之前就用过的特性,也有类成员指针,局部类这样新了解的特性。...解决继承关系类的相等运算符问题,可以看到关键是我们不能确定两个对象的类型从而无法对比它们的成员。...,但是依然可以在类外定义,就是需要更详细的名称指定而已 嵌套类的名字查找和普通的查找一致 在嵌套类的外层类完成真正的定义之前,嵌套类都不算是一个完全类型 19.6 union:一种节省空间的类 union...,让外部访问不同成员时按照情况析构union目前的成员,构造新的成员 19.7 局部类 类似于嵌套类,局部类是定义在函数内部的类,局部类的定义只在定义它的作用域中可见 局部类的特点是其所有成员都必须在类内完成定义...局部类内还可以嵌套类,但是嵌套类可以定义在局部类外部,但是必须定义在与局部类相同的作用域内 局部类内的嵌套类本质也属于一个局部类,所以嵌套类自身的成员必须定义在嵌套类内部 19.8 固有的不可移植的特性

    85340

    Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通

    char:u0000 ​ boolean: false ​ 引用类型:null ---- 三大特征:封装,继承,多态 封装 高内聚: 将内部数据操作细节自己完成,不允许外部干涉 低耦合: 减少外部联系...子类和父类间,从意义上应该具有“is a”的关系 [子类 is a 父类] package oop.demo05; public class Person { public int...X是Y的子类型得到true,否则false ---- 类型转换——引用类型 //继承关系 //Object>Person>Student //Object>Person>Teacher Student类有一个...final 接口不能被直接实例化(因为接口中没有构造方法) implements可以实现多个接口,且实现类必须要重写它所实现的所有接口中的所有方法 ---- 内部类 成员内部类...静态内部类——static 匿名内部类 局部内部类——可以写在方法里 ---- ---- 异常 java.lang.Throwable 用户输入的内容格式不符合?

    1K20

    打好Java基础,从使用内部类开始!

    将两者结合起来,可以解决 C++ 中用多重继承所能解决的问题,然后,多重继承在 C++ 中被证明是相当难以使用的,相比较而言,Java 的接口和内部类就容易理解多了! ?...如果你创建的是「嵌套类」(静态内部类),那么它就不需要对外部类对象的引用。...六、嵌套类 如果不需要内部类对象与外围类之间有联系,就可以将内部类声明为static,这通常称为嵌套类。...普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象,然而,当内部类是static的时候,就意味着: 要创建嵌套类的对象,并不需要其外围类的对象 不能从嵌套类的对象中访问非静态的外围类对象 public...七、继承内部类 内部类作为一种类,被继承当然也是被允许的。

    29730

    【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

    一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ 的 " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父类 : 需要 基类 ( 父类 ) 对象的...地方 , 都可以使用 " 公有继承 " 的 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :..." 公有继承 " 的 派生类 ( 子类 ) 本质上 具有 基类 ( 父类 ) 的 完整功能 , 使用 基类 可以解决的问题 , 使用 公有继承派生类 都能解决 ; 特别注意 : " 保护继承 " 和..." 私有继承 " 的 派生类 , 是 不具有 基类 的 完整功能的 , 因为 最终继承 后的派生类 , 无法在 类外部调用 父类的 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...子类对象 , 父类指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二

    30820

    这一篇让你彻底搞懂 JAVA内部类

    # 1.3 内部类可以实现 java 单继承的缺陷 我们知道 java 是不允许使用 extends 去继承多个类的。内部类的引入可以很好的解决这个事情。...接口解决了部分问题,一个类可以实现多个接口,内部类允许继承多个非接口类型(类或抽象类)。...事实上静态内部类「嵌套类」的确不依赖于外部类的创建,因为 static 并不依赖于实例,而依赖于类 Class 本身。...:正式由于这种依赖关系,所以普通内部类中不允许有 static 成员,包括嵌套类(内部类的静态内部类) ,道理显然而知:static 本身是针对类本身来说的。...局部内部类有两点值得我们注意的地方: 局部内类不允许使用访问权限修饰符 public private protected 均不允许 局部内部类对外完全隐藏,除了创建这个类的方法可以访问它其他的地方是不允许访问的

    24020
    领券