‫欢迎回来｡
‫在这段视频中, 都是关于传承的｡
‫我们将创建一个类, 我将其命名为post.
‫所以一个新的类, 这将是一个职位｡
‫想象一下, 这是一个社交媒体帖子, 比如Twitter帖子或Facebook帖子或任何类型的帖子｡
‫我的想法是, 我想从帖子继承, 我想创建一些东西,
‫比如图片帖子或视频帖子, 这些东西将使我们能够更好地理解继承的概念,
‫你可以在未来将其应用到不同的对象和不同的情况｡
‫首先, 一个帖子有一个变量, 我会在当前帖子ID中将其设为private static.
‫所以这个是那个帖子的一个字段, 它是静态的｡
‫所以在这篇文章之外也可以使用｡
‫并且在应用程序启动后将创建它｡
‫好吧, 我知道了
‫所以我们能做的是, 首先, 创建一些属性｡
‫现在, 属性背后的想法, 如你所知, 是它们给予你一些关于对象的更多信息, 对吧｡
‫所以在我们的例子中, 如果我创建一个post对象, 那么就有一些我们真正想要的信息｡
‫例如, 作为一个管理员､ 程序员, 而不是一个用户, 我们希望很好地了解ID｡
‫最终用户对帖子ID不感兴趣, 但作为管理员或程序, 您应该感兴趣, 因为每个帖子都应该被标识,
‫并且应该有一个唯一的ID｡
‫所以我们要有身份证｡
‫我们需要一个标题｡
‫比如说, 帖子有一个标题, 可能是一个描述或者一段文字, 类似这样的东西｡
‫然后我们需要知道是谁发的帖子, 以及它是否应该公开｡
‫当然, 关于一个帖子还有很多需要了解的地方, 或者一个帖子中可能有很多属性,
‫但是我们现在要保持简单｡
‫我在这里创建了protected属性, 我们还没有用到protected属性,
‫但最后protect意味着它只能被这个类, post类和任何派生类, 从post派生的类使用.
‫我将继续创建第一个ID, int, I, d, 然后使用get和set.
‫然后又是另一个属性｡
‫所以我在这里使用Prop, 它应该是一个字符串, 我把它叫做title, 和以前一样, 它应该是受保护的.
‫然后是另一个属性, 我将再次使用字符串, 这个属性将按用户名发送｡
‫所以谁寄来的, 它也会被选中｡
‫最后, 一个名为is public的属性｡
‫它是一个布尔值, 因为它只能有两个值.
‫因此, 要么是公共的, 要么不是公共的｡
‫所以我们只有这些性质, 对吧？
‫现在我们创建一个默认构造函数, 关于默认构造函数, 我们有一些需要了解的东西｡
‫如果衍生出来｡
‫如果草稿类不显式调用基类构造函数, 则隐式调用默认构造函数｡
‫这就是我们在这里创建一个的原因｡
‫我们创建了一个公共帖子, 现在这个帖子是好的, 因为我们在这里没有得到任何参数｡
‫我们将在此处定义或设置值, 因此ID将为零｡
‫然后标题是, 例如, 我的第一篇文章, 或者可能与空白｡
‫第一篇这样的文章是公开的吗？
‫好吧, 让我们说真的, 因为我们想看到它, 然后发送的用户名以及由我发送｡
‫那么接下来就是新来的这个案子了｡
‫因此, 无论何时我们创建一个帖子, 它都将是这个帖子｡
‫所以这将是我的第一篇文章, 对吗？
‫然后我想有另一个实例构造函数, 它有几个参数｡
‫所以我想创建一些帖子, 在那里我可以定义这些东西｡
‫我不定义ID, 但我可以定义标题｡
‫我可以说它是否公开, 以及它是否由哪个用户名发送｡
‫所以你可以想象一下, 假设你写了一个小的社交媒体程序, 你想拥有发帖的能力,
‫然后你需要在你创建帖子的时候发送这些信息｡
‫因此, 用户创建一个帖子, 它会获得一个自动定义的ID, 然后它会获得一个自动定义的ID,
‫或者它会根据用户输入的内容获得一个定义的标题｡
‫它是公开的, 取决于用户勾选了什么, 不管他决定公开与否, 它都是由他发送的｡
‫所以这只是一个帖子创建时提供的数据｡
‫因此, 现在让我们创建一个具有三个参数的实例构造函数｡
‫我将创建公共帖子, 在这里我将使用字符串title｡
‫布尔是公共的, 字符串由用户名发送, 在这里我将设置ID, 为此我将需要一些东西｡
‫所以我现在把它设为0｡
‫但我需要一个额外的方法, 它将始终为每个帖子创建一个新的ID, 我们将在第二秒钟看到它是如何工作的｡
‫所以这个标题就是标题｡
‫这个由username发送的将由username发送, 这里有一个不大写的字母, 这个点是public, 将是public,
‫不是属性, 而是这个参数｡
‫所以现在我设置它不为零｡
‫ID应该是唯一的｡
‫所以最好的方法是创建一个被保护的方法, 叫做get next ID.
‫它只会返回下一个ID, 即当前帖子ID, 在此之前我们会递增｡
‫所以每次调用它, 它都会自己加1｡
‫所以这里的这个, 这个当前的帖子ID将增加1｡
‫现在我们不把这里的值设为零, 而是调用next ID或get next ID方法.
‫现在, 你还想在这样一个程序中有什么可以发布的东西？
‫嗯, 我想是调整岗位的能力吧｡
‫所以现在我们创建了一个帖子, 如果我们不能更改该帖子, 我们将非常不高兴｡
‫嗯, 这确实是发生在Snapchat或那里的事情, 你创建了一张图片, 然后它就在那里了｡
‫你不能编辑那个图片, 不确定你是否能编辑文本,
‫但是这里我们希望能够编辑文本, 所以我们将创建一个新的方法public void update, 它应该接受标题｡
‫池是公共的, 因为如果你想一想, 用户应该能够更新什么？
‫他应该无法更新ID｡
‫他也不能更新用户名, 因为它是由他发送的｡
‫所以他有一个用户名, 这不应该对帖子的更新产生影响｡
‫所以在这里我们只需要更新帖子, 这意味着我们只需要改变标题和布尔值,
‫也就是说它是公开的还是非公开的.
‫在这里我们简单地说这个标题就是标题, 这个是公开的就是公开的｡
‫所以这就意味着, 就像我们现在看到的, 一个帖子｡
‫一个帖子就是一张蓝图｡
‫这个类是任何post实例的蓝图｡
‫所以每当我们发布的东西是那个自我的时候, 那个实例就是那个帖子｡
‫如果我们改变了它的标题, 我们就改变了那个特定帖子的标题｡
‫如果我们改变了, 不管它是公开的还是不公开的, 我们都会改变那个特定帖子的公开性｡
‫这使我们能够更新标题和现有帖子的宣传｡
‫现在我想创建的下一个是一个虚拟方法, 覆盖两个字符串, 它是从系统点对象继承的｡
‫所以System Dot对象是一个类, 在系统中出现｡
‫所以我们可以利用它｡
‫它在升C调范围内, 我们可以简单地使用它｡
‫这里有一个方法叫做字符串或者实际上从那里我们可以调用两个字符串方法｡
‫是这样｡
‫制｡
‫但是object有一个两个字符串的方法, 我们想覆盖它, 因为每个类,
‫所以我们的post类也是从object类继承的｡
‫所以系统那个对象是一个我们可以继承的类｡
‫比如说, 在这里, 我们可以从这个对象继承, 或者我们实际上每个类都从这个对象继承.
‫所以现在我们可以重写它的一个方法｡
‫所以公共重写, 字符串和两个字符串｡
‫如您所见, 它已经提出了这一点｡
‫所以它说返回一个字符串, 表示当前对象所属的对象类中的某个东西｡
‫正如你所看到的, 这里有一个叫做基于字符串的返回｡
‫基类有一个双字符串方法, 如果我们这样做, 那么它就没有任何意义了,
‫因为我们只会使用基类的双字符串方法｡
‫但是我们可以改变它, 这样我们就可以进行调整, 而不是返回基类将返回的任何内容｡
‫我们想做我们自己的事情, 所以我们要用字符串格式来格式化一个字符串, 这个字符串要有特定的信息｡
‫所以它将是ID, 它将是标题和谁发送它｡
‫所以我就用这样的信息｡
‫它将是这个ID, 然后是这个, 标题, 最后是这个由用户名发送的点｡
‫所以这就是将要返回的内容｡
‫所以每当我们使用两个字符串时, 它不会简单地返回关于对象的一些信息,
‫而是会以标准格式或者我们创建的格式返回｡
‫这就是我们的格式｡
‫好吧, 我会的
‫是这样｡
‫让我们创建该类的对象｡
‫让我们进入我们的程序, 然后在这里创建一个帖子｡
‫所以第一个帖子是新帖子｡
‫我可以在这里输入一些信息, 也可以不输入｡
‫所以如果我把它留下, 它就是默认的被调用的构造函数｡
‫这里的那个｡
‫如果我不这样做, 那么另一个将被调用｡
‫假设我发布了一些东西｡
‫谢谢你的生日祝福｡
‫所以大家都祝我生日快乐｡
‫所以我要说非常感谢, 我想让它成为现实, 因为我想让我的朋友看到它, 所以它应该是公开的｡
‫然后是犹他州的丹尼斯·潘｡
‫当然, 我们可以有一个用户类来完成所有的处理, 我们可以简单地检查哪些用户登录了等等｡
‫但是现在我们在这里只使用硬编码字符串｡
‫所以是犹他州的丹尼斯｡
‫这是一个新的帖子, 现在我们可以将其写到控制台上｡
‫所以W和我会说post, 点到字符串这里当然还有post, 一｡
‫我们的post实例, 这是我们的post实例, 我将其称为post 1, 它将在控制台上写入一些内容,
‫由于我们希望看到它是什么, 因此需要在此处重新对齐｡
‫所以我们只想让控制台保持打开状态, 这样我们就能看到那里发生了什么｡
‫然后, 如你所见, 我们是一个, 谢谢你的生日,
‫生日是丹尼斯·帕内塔的生日, 这个是这个帖子的ID｡
‫那么这就意味着我们的岗位在这里｡
‫这个得到一个新的ID, 这个新的ID是0 ++1或者+1, 也就是说它只有1.
‫这就是为什么我们在这里得到这个｡
‫ID是1, 这是帖子信息, 这是丹尼斯·潘发送的｡
‫现在我们有了一个post, 现在我们继续使用继承｡
‫因为到目前为止, 除了也许这里的这两个字符串之外, 实际上没有任何继承｡
‫所以实际上, 只是为了你｡
‫所以你知道我前面说的, 虚方法覆盖了两个从系统那个对象继承的字符串方法｡
‫现在我们来创建一个新类｡
‫这一个将是图像张贴, 因为好吧, 目前我们只能张贴某些简单的文本,
‫但在未来我们也希望张贴图像｡
‫现在, 图像帖子应该是基类帖子的派生类｡
‫因为这个类是一个非常简单的类, 我们要继续从它继承｡
‫所以为了从另一个类继承, 你要用冒号, 然后输入你想从其继承的类的名字｡
‫所以我想继承自任｡
‫这让我可以使用它的所有功能｡
‫这很酷, 因为现在我可以使用它的属性了, 我可以使用它的变量,
‫除了它的构造函数.
‫是的, 所以让我们继续这样做｡
‫让我们来扩展图像后｡
‫如你所知, 它是从post派生的, 现在它应该有另一个属性, 叫做图像URL和构造函数｡
‫所以这就是我想补充的｡
‫首先, 我需要一个属性, 它是一个名为image的字符串｡
‫你是l, 这将是图片的图片网址张贴｡
‫假设我们发布了一些东西, 其中有一张图片｡
‫然后它是自动的, 或者它应该是一个图像帖子, 它需要有一个图像URL｡
‫因此, 存储图像的位置可以在我们的服务器上, 也可以简单地在互联网上｡
‫所以不管有什么, 我们有这个, 或者你需要有这个图片的URL｡
‫现在让我们创建一个非常简单的构造函数, public image post就像这样,
‫没有别的｡
‫如你所见, 里面什么都没有｡
‫我不想在这里做任何事｡
‫然后我在这里创建另一个post或者image post构造函数｡
‫但这次我需要一些参数｡
‫所以它是字符串title, 字符串send by username, 字符串image URL, 实际上是ur l,
‫bool是公共的｡
‫所以我想拥有所有这些｡
‫现在, 在图像帖子中, 我想再次设置ID｡
‫这个点id等于得到下一个id, 这已经很酷了｡
‫这个身份证是从哪来的
‫这下一个ID是从哪里来的？
‫是从邮局发来的｡
‫所以我们用这个方法, 这个保护方法｡
‫我们可以在这里调用它, 我们可以使用它, 就像它是我们的｡
‫所以我们甚至不需要像post. get next ID这样的语句, 我们只需要简单地说get next ID,
‫对这个ID也是一样｡
‫所以每个图片帖子都有一个ID, 和帖子本身一样｡
‫现在, 这也是真正的标题｡
‫所以标题就是标题｡
‫然后这个点send by username将按用户名发送｡
‫最后, 这是公开的｡
‫现在, 这很酷｡
‫我们可以用那些东西｡
‫那太好了｡
‫现在我们也有了自己的属性, 也就是我们的图像URL｡
‫因此, 每当创建一个图片帖子时, 图片URL都必须作为一个参数给出｡
‫所以我们说这个图像的URL就是图像的URL｡
‫所以一方面, 我们有从岗位上继承下来的｡
‫所以我在这里加一句｡
‫另一方面, 我们有一个是我们自己的成员｡
‫因此, 属性image URL是image post的成员, 而不是post的成员｡
‫这是很重要的｡
‫所以Post并不知道这个图片的URL, 这也没关系｡
‫但是我们的图片帖子知道我们帖子的所有属性, 所以这就是继承｡
‫关于这张图片还有一点
‫是这样｡
‫这两个构造函数都是必需的, 因为这两个构造函数都不调用基类｡
‫所以我们不使用这个based out调用基类的构造函数, 基类中的默认构造函数是隐式调用的,
‫因为我们在这里没有显式调用它｡
‫所以无论是在这个, 还是在这个, 来自基类的构造函数｡
‫因此, 必须调用此默认构造函数, 或者在我们的post中必须有一个基构造函数｡
‫这就是我创造它的原因｡
‫因为你可能会想, 为什么我们需要它？
‫为什么会在那里？
‫它是必需的, 因为我们没有显式地调用它｡
‫好了
‫并且它将被隐式调用｡
‫好吧, 我知道了
‫好极了｡
‫就这样了｡
‫让我们进入我们的程序类并创建其中的一个帖子｡
‫我现在要创建一个图片帖子, 这将是一个新的图片帖子, 并实际上给予它一个名称｡
‫我将把它命名为“图片发布一号”｡
‫这将是一个新的图像后｡
‫我要去看看我的新鞋, 因为我买了一些新鞋, 他们是可怕的真棒｡
‫是谁寄来的？
‫丹尼斯·帕内塔对他的新鞋非常兴奋｡
‫当然, 他需要有这些图像的链接｡
‫嗯, 他只是上传了图片, 但图片本身有一个链接, 因为它存储在我们的存储器的某个地方,
‫所以或在我们的服务器｡
‫这将是一个安全的https, 我将在这里伪造一个链接｡
‫我就称之为图片, 网站斜线鞋, 嗯, 他把它公之于众｡
‫原来是真的｡
‫我们把它放到下一行, 这样更容易阅读｡
‫现在我们有了图像帖子, 我们现在可以对图像帖子做的是在控制台上再次写入一些内容, 以查看发生了什么｡
‫我将调用图像1｡ 2弦, 这也是一个很酷的东西｡
‫所以我们在image post 1上调用这两个字符串方法｡
‫你看到这里的每个字符串方法了吗？
‫我不知道｡
‫这很酷, 因为我们从post中取了一个, 所以我们从post继承, 现在我们取它的方法,
‫叫做两个字符串.
‫如果我们运行｡
‫事实上, 我们得停止报道.
‫因为我们看不到｡
‫有一根芦苇, 它不见了｡
‫所以我们要把这条红线贴在这里｡
‫让我们再运行一次, 它说, 看看我的新鞋, 丹尼斯·帕内塔设计的.
‫但联系在哪里呢？
‫我需要链接｡
‫快点, 把链接给予我｡
‫因为我们文章的两个字符串方法不知道链接｡
‫它没有任何关于链接的线索｡
‫它不关心链接｡
‫它不需要｡
‫所以给你一个小小的挑战｡
‫这就是我们现在要完成视频的方式｡
‫请创建一个两个字符串的方法在我们的图像后, 也通知我们有关的链接｡
‫好吧, 我会的
‫我希望你试过了｡
‫所以我要做的就是保持简单｡
‫我将把这里的两个字符串复制到我们的图片帖子中, 我将稍微更改一下格式｡
‫我要在这里补充一点声明｡
‫所以too将是链接, 而three仍将是用户｡
‫所以我们需要这里的链接｡
‫所以这个点图像的URL是逗号, 所以顺序是ID标题, 然后由用户发送URL｡
‫所以如果你这样做, 我们从基本子句重写｡
‫因此, 我们覆盖了从系统对象重载的post中的两个字符串｡
‫所以你可以看到你可以覆盖它, 覆盖它, 等等｡
‫我们将看到极限在哪里, 或者我们如何限制它｡
‫现在我们来运行它｡
‫而且我们可以看到｡
‫看看我的新鞋｡
‫这是链接｡
‫丹尼斯·帕内塔｡
‫现在, 我可以单击控制台中的链接｡
‫我做不到｡
‫但一般来说, 我可以点击链接, 我可以看到图像或我的工具, 我的应用程序, 例如, 可以阅读链接,
‫并显示图像｡
‫好吧, 我会的
‫这是我们对继承的第一印象｡
‫这是一个很长的视频｡
‫这我知道｡
‫继承权远不止这些｡
‫我们会研究很多更酷的东西｡
‫但首先, 我们将在下一个视频中进行一个挑战｡
‫我们在下一个视频中再见｡