构造函数

Java 中的封装、继承与多态

与世无争的帅哥 提交于 2020-02-15 05:50:12
在前面的 《 Java — 面向对象的编程语言》 里,介绍了面向对象的三大特征:封装、继承、多态,主要是概念上的讲解,本篇文章将从代码出发,看看 Java 中的封装、继承与多态。 一、封装 在编程时,把数据(属性)和有关属性的一些操作(方法)绑定在一起,形成一个不可分开的集合(类),这个过程就是封装( Encapsulation )。 封装时,我们需要隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的读和写的 访问级别 。 一般情况下,我们会把所有的属性都 私有化 ,对每个属性提供 getter (读) 和 setter (写) 方法,供外界使用: public class Person { private String name ; private int age ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public int getAge ( ) { return age ; } public void setAge ( int age ) { this . age = age ; } } public class Me { public static void main ( String [ ]

继承和多态

对着背影说爱祢 提交于 2020-02-14 04:26:50
一.继承概述   1.什么是继承:   如果类A继承自类B,类B又继承类C,那么根继承的传递性类A也可以具备类C的属性和方法   我们需要注意的是,如果一个类我们眼睛去看的时候没有继承任何类,那么默认继承object   2.如何避免这种冗余   创建一个新的Employee,将PM类和SE类中的公共属性都提取出来放在这个类中   删除PM和SE类中的公共部分,保留他们各自独有的成员   编写代码验证是否成功复用代码,PM类和SE类还能否提取出来的属性 二.继承的概念   继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能   继承:在C#中,类可以继承自另一个类      衍生的类(子类)继承父类的方法和数据成员     语法:       class 子类:父类         {             }     父类叫基类 子类叫派生类 三.关键字base的作用   可以调用父类的属性,也可以调用自身的属性 四.子类的构造函数 1.继承机制很好的解决了代码复用的问题 2.子类继承父类的成员,并且可以拥有自己特有的成员 3.base关键字可以调用父类的属性,方法和构造函数 4.在子类中,如果不使用base关键字来显示调用基类的构造函数则将隐式调用默认的构造函数 5

c++11 右值引用、移动语义和完美转发

て烟熏妆下的殇ゞ 提交于 2020-02-14 03:19:49
c++11 右值引用、移动语义和完美转发 作者:StormZhu 链接:https://www.jianshu.com/p/d19fc8447eaa c++中引入了 右值引用 和 移动语义 ,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值 C++ 中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的 持久化对象 ,右值是指表达式结束时就不再存在的 临时对象 。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法: 看能不能对表达式取地址,如果能,则为左值,否则为右值 。 看见书上又将右值分为将亡值和纯右值。纯右值就是 c++98 标准中右值的概念,如非引用返回的函数返回的临时变量值;一些运算表达式,如1+2产生的临时变量;不跟对象关联的字面量值,如2,'c',true,"hello";这些值都不能够被取地址。 而将亡值则是 c++11 新增的和右值引用相关的表达式,这样的表达式通常时将要移动的对象、 T&& 函数返回值、 std::move() 函数的返回值等, 不懂将亡值和纯右值的区别其实没关系,统一看作右值即可,不影响使用。 示例: int i=0;// i是左值, 0是右值 class A { public: int a; }; A getTemp() {

Java中super关键字的作用与用法

笑着哭i 提交于 2020-02-14 02:10:43
Java中的super是什么? java中的super关键字是一个引用变量,用于引用父类对象。关键字“super”以继承的概念出现在类中。主要用于以下情况: 1.使用super与变量: 当派生类和基类具有相同的数据成员时,会发生此情况。在这种情况下,JVM可能会模糊不清。我们可以使用以下代码片段更清楚地理解它: /* Base class vehicle */ class Vehicle { int maxSpeed = 120; } /* sub class Car extending vehicle */ class Car extends Vehicle { int maxSpeed = 180; void display() { /* print maxSpeed of base class (vehicle) */ System.out.println("Maximum Speed: " + super.maxSpeed); } } /* Driver program to test */ class Test { public static void main(String[] args) { Car small = new Car(); small.display(); } } 输出: Maximum Speed: 120 在上面的例子中

java基本的知识第一天。

我们两清 提交于 2020-02-14 00:33:45
本博客的所有文均为自己学习的笔记,学习用到的资料的内容并非原创,从原作者处学习。 1个字节是8位 然后的话用byte表示 然后的话K和byte的关系是1024 也就是说k这个单位对应的1024是和byte相比的。 这里可以看到就是各种数据类型 然后的话和我之前看的不一样的地方是:python的话不怎么注重数据类型的 直接就用了。 这里可以看到就是各个占的字节数,key是字节的数量,也就是说:对于byte来说,是1个字节 反而short的话比byte还多了 而int是4个字节 float的话也是四个字节 double是8个。 char的话是两个字节。 这里说的是它的存储,就是存储的空间的大小的问题。short反而比byte要多,单位是字节来的。 这里的话说的是:每个数据类型能够表示的数的最大和最小的问题,至于具体的话为什么说正的数比负的数是少1的关系呢,我个人解释来说如果符号位是0 后面全部填的都是1的话 那么加起来确实就是最大值-1, 但是的话为什么负可以到最小的数呢? 我认为是不是因为10000000这样表示的是:-128的问题呢?这里我还存疑 知道的话每种数据类型表示的最大和最小的数是多少先。 这里是说:布尔类型是用boolean来表示 然后的话char是字符型的。 这里的话是说有个var类型 就是可以不写变量类型。 括号进行类型的强制转换,上课的时候老师好像说的是:C+

[转][c++11]我理解的右值引用、移动语义和完美转发

自作多情 提交于 2020-02-13 22:25:42
c++中引入了 右值引用 和 移动语义 ,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值 C++ 中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的 持久化对象 ,右值是指表达式结束时就不再存在的 临时对象 。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法: 看能不能对表达式取地址,如果能,则为左值,否则为右值 。 看见书上又将右值分为将亡值和纯右值。纯右值就是 c++98 标准中右值的概念,如非引用返回的函数返回的临时变量值;一些运算表达式,如1+2产生的临时变量;不跟对象关联的字面量值,如2,'c',true,"hello";这些值都不能够被取地址。 而将亡值则是 c++11 新增的和右值引用相关的表达式,这样的表达式通常时将要移动的对象、 T&& 函数返回值、 std::move() 函数的返回值等, 不懂将亡值和纯右值的区别其实没关系,统一看作右值即可,不影响使用。 示例: int i=0;// i是左值, 0是右值 class A { public: int a; }; A getTemp() { return A(); } A a = getTemp(); // a是左值 getTemp()的返回值是右值(临时变量)   左值引用、右值引用

构造/析构/赋值运算

左心房为你撑大大i 提交于 2020-02-12 17:33:29
条款05:了解C++默默编写并调用哪些函数   如果你没有声明任何构造函数,编译器也会成为你声明一个默认构造函数,默认构造函数和析构函数主要给编译器一个地方用来放置“藏身幕后”的代码,像是调用base classes和non-static成员变量的构造函数和析构函数。所有这些函数都是public且inline,编译器产生出来的析构函数是non-virtual,除非这个class的base class自身声明有virtual析构函数。   惟有当这些函数被需要(被调用),它们才会被编译器创建出来。即有需求,编译器才会创建它们。   至于拷贝构造函数和拷贝赋值操作符,编译器创建的版本只是单纯地将来源对象的每一个非静态成员变量拷贝到目标对象。   如一个类声明了一个构造函数(无论有没参数),编译器就不再为它创建默认构造函数。   编译器生成的拷贝赋值操作符:对于成员变量中有指针,引用,常量类型,我们都应考虑建立自己“合适”的拷贝赋值操作符。因为指向同块内存的指针是个潜在危险,引用不可改变,常量不可改变。 请记住:   编译器可以暗自为类创建默认构造函数、拷贝构造函数、拷贝赋值操作符,以及析构函数。 条款06:若不想使用编译器自动生成的函数,就该明确拒绝   通常如果你不希望类支持某一特定技能,只要不说明对应函数就是了。但这个策略对拷贝构造函数和拷贝赋值操作符却不起作用。因为编译器会

Spring-01 概念&反转控制IOC&依赖注入DI

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-12 14:01:08
1.Spring概述 1.1 spring是什么? Spring是分层的java应用jull-stack轻量级框架,以**Ioc和AOP**为核心,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合众多第三方框架和类库。 1.2 spring优势 1. 方法解耦,简化开发 通过Ioc容器,可以将对象间的依赖关系交给Spring控制,避免硬编码造成的程序耦合。用户也不必为单例模式、属性文件解析等低层代码今昔编写。 2. AOP编程支持 通过AOP的工厂,方便进行面向切面编程,许多功能可以轻易通过AOP实现。 3. 声明式事务的支持 可以从事务管理代码中解脱出来,通过声明式事务的管理,提高开发效率和质量。 4. 方便程序的测试 可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。 5. 方便集成各种优秀框架 Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz 等)的直接支持 6. 降低java ee API使用难度 Spring对JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API的使用难度大为降低 7. 源码高大上 值得学习 Spring的源代码设计精妙

POD C++

冷暖自知 提交于 2020-02-12 13:20:04
Plain Old Data https://zh.cppreference.com/w/cpp/named_req/PODType 简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。 这表示该类型与用于 C 程序语言的类型兼容,即能直接以其二进制形式与 C 库交互。 注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。 此类型要求在 C++ 标准中已弃用。其所有使用都已被替换成更为斟酌过的类型要求,例如 平凡类型 (TrivialType) 。 (C++20 起) 要求 以下之一: 标量类型 ; 满足下列要求的类类型( class 或 struct 或 union): 聚合类型 ; 没有非 POD 的非静态成员; 没有引用类型的成员; 没有用户定义的复制构造函数; 没有用户定义的析构函数 (C++11 前) 为 平凡类型 ; 为 标准布局类型 ; 没有非 POD 的非静态成员; (C++11 起) 这种类型的数组 ----------------------------------------------------------------------------

C++总结(二)

ε祈祈猫儿з 提交于 2020-02-12 02:31:24
一、this指针 1、概念 :类非静态成员函数的第一个隐藏的参数,该参数使用指向调用当前函数的对象 2、特性 : this指针类型:T* const 普通类型成员函数:T* const 可以修改对象的内容,可以调用普通和const类型的成员函数 const类型成员函数:const T* const:this指向不能修改并且指向对象中的内容也不能修改,只能调用const类型的成员函数 this是非静态成员函数的第一个隐藏参数,隐藏:用户在编写函数时不用给出this的参数,该参数是编译器自己维护,调用该函数也不需要手动传递,this指针的传参也是编译器自己进行 this指针只存在于正在运行的成员函数中,this指针不会存在于对象中,不会影响类对象的大小 静态成员函数:没有this指针 this指针的传递:一般情况exc寄存器(this_call:调用约定),也可能通过参数压栈的方式进行传递:push 对象地址(比如:类中如果包含不定参数的成员函数) 3、this指针是否可以为NULL 如果成员函数是通过对象的方式进行调用,this指针一定不会为NULL: 如果成员函数是通过类类型的指针方式进行调用,this指针可能会为NULL: 4、this指针位置:栈 类的编译过程: 1、识别类名 2、识别类中的成员 3、识别类中的成员函数,并对成员函数进行改写 二、类中六个默认的成员函数 1