‫欢迎回来｡
‫现在又是挑战时刻, 我希望你们能够查看完整的传承视频,
‫了解发生了什么, 如何创建帖子和图片帖子, 以及它们之间的相互关系, 以及它们之间的联系｡
‫因此image post是派生类, post是基类｡
‫因为现在的小挑战是创建一个名为Video Post的新类, 它是一个具有属性video
‫URL和length的驱动类｡
‫所以这些是视频帖子的独特属性｡
‫所以想象一下, 我们仍然在这个职位类型的事情, 我们有正常的职位, 这只是文本,
‫然后我们有或可以是文本, 但其他任何东西以及｡
‫然后, 我们有一个图像帖子, 其中也有一个图像URL, 现在我们想要有一个视频帖子,
‫其中我们实际上有一个视频URL, 而不是一个图像URL和视频的长度｡
‫所以这些就是我们想要的关于每个视频帖子的信息｡
‫因此,
‫现在创建所需的构造函数, 以创建相应地调整为字符串方法的视频帖子, 因为我们已经在图像帖子中看到, 两个字符串方法根据已经发送到这里的信息添加了一些更多的信息｡
‫但我们想知道更多关于视频帖子比我们知道的帖子｡
‫因此只需两个字符串方法便创建了一个视频帖子的实例｡
‫所以和我们在图片贴上做的差不多｡
‫只需创建一个, 然后将其写入控制台即可｡
‫所以也许我应该加一个, 然后用两个字符串的方法.
‫然后如果你觉得是一个真实的挑战, 那么你可以继续进行更高级的东西｡
‫因此在这里使用一个计时器和一个回调方法｡
‫你可以谷歌一下｡
‫你可以简单地, 你可以试着自己做, 或者你可以谷歌一下｡
‫我们的想法是, 我们的视频发布有一个名为play的方法和一个名为stop的方法, 当调用play时,
‫他们应该写入视频的当前持续时间｡
‫所以每一秒都应该有一个勾号写着我们当前在视频的哪一秒｡
‫然后按下一个停止键, 计时器停止, 还有一个写着停止的文本, 这是最好的双P, 是的,
‫差不多就是这样｡
‫因此, 在创建实例后播放视频, 并在用户按下任意键时暂停视频｡
‫或者可以在用户按下任何键时停止它｡
‫所以按下任意键, 我的意思是你有一条真实的线｡
‫因此, 只要保持简单或阅读键更好｡
‫因此, 只要保持简单, 你在这里看到的将帮助你创建甚至视频播放器以后｡
‫这只是一个基本概念, 这里使用定时器｡
‫但正如我所说, 这一个是更先进的部分｡
‫如果你不想做, 或者太难了, 那也没关系｡
‫你可以看看视频, 但我真的建议你看看这个, 因为它会教你如何使用计时器和回调,
‫只是谷歌它｡
‫最好是亲自体验一下它是如何工作的, 这样下次你想使用计时器时就一定会记住它｡
‫好吧, 我会的
‫现在暂停视频, 试着做这个挑战｡
‫已经准备好了｡
‫我希望你试过了｡
‫首先, 我们当然需要一个新的班级｡
‫这将是我们的视频帖子｡
‫现在, 视频帖子应该继承帖子｡
‫在这里, 就像我说的, 我们会有一个不同的属性, 或者实际上是两个不同的属性, 这是我们以前没有的｡
‫其中一个是视频URL保护的字符串, 它是一个get和一个set｡
‫同样的, 用lengthprotected, int, 用大写l, 最好也用get和set.
‫接下来, 我们需要一个构造函数, 所以让我们在这里创建一个构造函数｡
‫公开视频帖子, 我将再次将其留空｡
‫与我们在这里的图像帖子中使用的方法相同, 我们只是创建了这个空构造函数, 因为两个构造函数都不调用base子句｡
‫从邮局来的那个人会被叫来｡
‫这里的那个｡
‫因此, 如果我们有一个空的视频post, post方法将被调用, 或者post构造函数将被调用为默认值｡
‫但我们也有一个真正交出所需信息的地方｡
‫例如, 对于一个视频帖子, 有趣的是,
‫一方面是标题, 字符串标题, 然后是用户名, 然后是URL, 字符串视频URL和发布的布尔值,
‫甚至是长度｡
‫所以在这里长度也是有用的｡
‫好吧, 我会的
‫就参数而言, 构造函数相当长｡
‫当然, 现在我们需要使用这个点, 当然, 这个点get ID或get next
‫ID在这里也是必需的｡
‫因此, 我们不希望创建已经存在的ID｡
‫我们要继续并使用下一个ID｡
‫您可能还记得, 这个get next ID返回并增加了当前的post ID,
‫它是一个静态变量｡
‫所以它对于整个程序来说是唯一的, 这意味着它将被一个新值覆盖, 或者我们将简单地得到新值,
‫它总是一次只有一个ID｡
‫所以每个ID都是唯一的, 这一点非常重要｡
‫然后标题就是标题, 实际上我们甚至可以从这里复制它, 因为这是同样的方法｡
‫好吧, 我知道了
‫还有｡
‫我们可以简单地在这里导入它, 现在我们继续我们的唯一URL｡
‫所以属性视频URL是一个成员的视频后, 实际上我叫它不小心被发布, 但它应该是公共与您的职位,
‫但不是职位｡
‫这个视频URL就是视频URL, 这个长度就是长度｡
‫所以这里给出的参数应该被纳入对象的属性, 也就是长度视频URL, 当然还有我们从post继承的属性｡
‫好了, 这就是我们的构造函数｡
‫现在我们需要一个双字符串方法｡
‫正如我们所说, 我们需要一个特定的双字符串方法｡
‫最简单的方法是从图片帖子中复制它, 然后再覆盖一次｡
‫所以公共字符串覆盖字符串｡
‫所以我们重写post类的方法, 也就是说我们在这里重写这个方法, 它再次从系统中重写那个对象｡
‫这就是继承的好处, 你可以不断地重写｡
‫现在我们有了字符串格式, 它可能会有一点不同｡
‫嗯, 不同｡
‫我们可以决定是否要这样做｡
‫我们可以在这里发送长度, 也可以保持原样｡
‫因此, 唯一的区别将不是图像URL, 而是视频URL是必需的｡
‫如果你喜欢的话, 你也可以在这里加上长度｡
‫所以如果你想知道的话｡
‫所以我们就这么做吧｡
‫也许最简单的方法就是这样做, 这样就可以了｡
‫在这里我只需要加上这个点的长度, 然后用逗号分隔｡
‫为了让它更易读, 我在这里再加一行｡
‫好了, 这就是我们的双字符串方法｡
‫现在我们可以进入我们的帖子或者实际上进入我们的程序课堂｡
‫在这里, 我们可以创建一个视频帖子｡
‫视频发布我们将称之为视频发布｡
‫其中一个将是一个新的视频帖子, 我们可以继续这样做｡
‫但这样的话, 它将是一个空的职位, 这是我们的ID零职位, 就像这里的一个, 它只是有我的第一个职位作为信息｡
‫这是公开的, 是丹尼斯·帕内塔写的, 但这不是很有趣｡
‫因此, 我们将创建一个具有自己的唯一值的表, 该表将具有唯一ID, 因为我们是这样创建的｡
‫所以我们可以继续, 在这里, 我会说这是一个失败的视频, 我上传了它｡
‫所以丹尼斯·帕内塔上传了它, 你可以在https视频网站下找到它, 或者类似的东西｡
‫这只是一个假身份证或假链接视频. com斜杠失败的视频｡
‫因为这一排太长了, 我把它放到下一排.
‫我们现在需要的是, 如果你在这里检查一下, 有两个重载, 让我们来检查一下重载｡
‫我们需要有一个额外的信息, 关于访问或它是否是公共的｡
‫我们又到了这里, 公共场所, 现在我们需要长度｡
‫假设这段视频有15秒或者10秒长｡
‫10块就可以了｡
‫所以只要10秒钟就行了｡
‫而现在｡
‫差不多就是这样｡
‫因此, 我们已经可以开始我们的程序, 我们应该看到有关我们的视频帖子的信息｡
‫当然, 更具挑战性的部分仍然缺失｡
‫我们看看我的新鞋子, images. com, 实际上我们还没有调用这个方法, 两个字符串的方法,
‫所以也许我们应该这么做｡
‫接下来我们需要调用这个video posts to string方法｡
‫好吧, 我会的
‫顺便说一下, 如果你想知道你能看到的视频, 这里已经有多种方法了｡
‫这些数字不是我们创造的｡
‫他们就在那里｡
‫这是因为我们继承了post, 它又从系统继承了那个对象.
‫顺便说一下, 如果你也检查一下post one, post one, 你也可以在那里看到这些方法｡
‫所以等于get hashCode get type update｡
‫所以这些方法, 它们都是从系统对象类继承来的｡
‫好了, 现在我们有两个字符串｡
‫现在我们当然需要把它放到控制台右行中｡
‫实际上, 让我们复制这里的代码, 并将图片帖子替换为视频帖子｡
‫好吧, 我会的
‫现在我们可以开始了｡
‫所以, 一件事的生日祝福, 然后三个你可以看到,
‫视频帖子有一个不同的ID比我们的图片帖子｡
‫所以我们有一, 三, 二｡
‫这正是我们将它们写入控制台的顺序｡
‫所以如果你在这里查看视频帖子, 即使它是在我们之前打印的图片帖子之后创建的, 如果你想的话,
‫这会给我们一个错误的顺序｡
‫但是顺序并不重要, 如果你好, 它是基于你想显示什么｡
‫因此, 如果您希望根据图像的创建顺序显示图像,
‫或者根据帖子的创建顺序显示帖子, 或者您希望显示最新的1/1, 这类事情, 那么顺序当然很重要｡
‫但在我们的情况下, 这真的很好, 我们有这样的方式｡
‫你可以看到ID是在创建对象的时候设置的, 所以ID是3, ID是2, 而另一个是在调用的时候,
‫比如这里的两个字符串方法.
‫所以如果要有正确的｡
‫创建它们的顺序的顺序将如下所示｡
‫现在我们可以看到一, 二, 三｡
‫所以谢谢你的生日祝福｡
‫然后我们的形象与新鞋比失败的视频由丹尼斯帕内塔｡
‫如你所见, 长度为10的也被发送了｡
‫好吧, 我会的
‫这就是第一部分｡
‫现在是更高级的挑战, 即创建一个计时器和一个回调方法, 该方法每秒调用一次,
‫并应通知我们视频的持续时间或视频的当前持续时间｡
‫当然, 我们需要根据需要创建字段｡
‫因此, 这里还需要一些附加字段｡
‫例如, 我们需要知道我们在视频中的哪个点｡
‫现在, 让我们在创建属性之前创建字段｡
‫这里是属性, 现在让我们创建内存字段｡
‫一个受保护的布尔值是播放, 这很有用, 因为如果视频正在播放, 你可以暂停它｡
‫如果它不播放, 那么你可以停止, 开始它｡
‫所以这真的很重要｡
‫因此, 如果视频已经在播放, 您就不会想开始播放它｡
‫这就是为什么我们在这里有一个辅助布尔值, 然后我们需要一个受保护的int cur duration｡
‫现在是零, 以便调用计时器｡
‫我们创建一个新方法, 创建一个public void play方法, 还创建一个stop方法.
‫所以公共无效, 停止｡
‫现在, 我们要做什么？
‫首先, 我们在控制台上写点东西, 比如说玩｡
‫所以我们｡
‫好吧, 我会的
‫这出戏还是开演了｡
‫视频开始｡
‫在这里我想设置计时器｡
‫首先让我们创建计时器｡
‫所以我们需要一个计时器, 计时器, 我把它叫做计时器｡
‫现在, 为了使用计时器, 我们需要使用系统点线程｡
‫这就是我使用系统线程所需要的｡
‫现在我们可以继续做的是, 每当按下place时, 初始化计时器｡
‫所以计时器将是一个新的｡
‫计时器｡
‫计时器回呼应该是之后呼叫的方法｡
‫我们需要说明的是, 我只想说不｡
‫如你所见, 你需要一个计时器回调, 然后你需要一个对象,
‫你需要做时间和周期, 到期时间是它应该开始的时间, 周期应该是它应该重复的频率,
‫或者它应该在哪个时间段内重复｡
‫我把到期时间设为零, 周期是1000毫秒.
‫当然, 现在我需要这个计时器回调方法, 我将继续创建它｡
‫它应该是一个私有方法因为我不希望其他人只在这个类中调用它.
‫因此, 只有void video post应该能够调用此计时器回调和计时器回调,
‫而它需要一个对象作为其参数｡
‫我会说, 哦, 我会调用它,
‫现在我可以检查当前持续时间是否低于视频长度, 然后我想继续, 将当前持续时间增加一, 并显示在控制台上｡
‫因此, 看到像这样的0秒时的w视频, 然后我们需要有当前的持续时间｡
‫所以它的作用就在控制台上｡
‫现在为了强制这个视频的垃圾收集器, 我们将使用GC点收集, 这样就可以清理所有的混乱｡
‫顺便说一句, 如果当前持续时间不低于该长度, 则意味着视频结束｡
‫我们要调用stop方法｡
‫所以在这里我们只需要叫停｡
‫而现在停止的需要, 当然要得到落实｡
‫让我们看看我们需要什么, 在控制台右边的点线上停止, 然后我们说在哪一秒停止视频, 我会说勇气,
‫持续时间｡
‫当然, 我们需要将当前持续时间重置为零, 停止计时器, 停止计时｡
‫我们称之为post方法｡
‫这一个只是清理计时器或停止计时器并重置它｡
‫现在为了让这个更干净｡
‫正如我所说, 我们有这个比赛场地, 我们可以在我们的比赛方法中使用它｡
‫所以我们只能说如果是玩这个假的｡
‫所以我们用惊叹号at来开始｡
‫只有那时我才想这样做｡
‫只有这样我才想开始演奏｡
‫只有这样我才想初始化计时器｡
‫如果它不播放, 那么什么也不会发生｡
‫在这里我们也可以这样做｡
‫所以在stop方法中我们可以检查is playing是否为true｡
‫所以只有当玩家在玩的时候, 我们才能阻止它｡
‫好吧, 我会的
‫我们的视频发布课程到此结束｡
‫所以现在我们应该可以通过我们的程序来检查它, 并在某个点上开始创建或播放视频｡
‫所以我要做的是在我创建了视频帖子之后, 我将播放它｡
‫然后就像我说的, 我想离开或者让用户实际上停止播放视频｡
‫那么, 我们如何执行读取密钥的控制台, 然后我将调用stop方法, 当然, 在这两者之间,
‫我将通知用户您应该执行什么操作｡
‫所以我要用C｡ W的｡ 在这里, 控制台右边的行, 我会说按任意键停止视频｡
‫好吧, 我会的
‫现在我们可以去看看了｡
‫看看我们在那里建造的东西是否真的能工作, 以至于我们按下任何键来停止视频？
‫如您所见, 视频已开始播放, 假设我想按任意键, 但实际上我的速度太慢｡
‫所以视频通过了, 10秒后就停了｡
‫为什么呢？
‫那是因为我们的视频只有10秒长｡
‫所以我们有这个长度属性, 它表示视频有多长｡
‫假设我们创建了一个不同的视频, 并且我们想要这个视频, 或者实际上我们将视频帖子的持续时间更改为5秒｡
‫所以我们就这样做, 再运行一次｡
‫然后你会看到5秒后它会停止｡
‫就这样
‫视频已完成｡
‫现在让我们手动停止它｡
‫再来一遍｡
‫我们到了｡
‫让我们按任意键停止视频｡
‫但它不起作用｡
‫这是因为如果我们检查后, 克劳斯是发挥是错误的｡
‫这就是为什么玩从来都不是真的｡
‫所以我们需要做的就是把is设为true.
‫我们这一站也是一样｡
‫所以我们说是打是假｡
‫好了, 现在我们回到这里, 再运行一次｡
‫现在视频正在运行, 我发布了它, 或者我停止了它, 它说停止在4,
‫我们甚至可以继续下去, 并改变它停止这4秒像这样｡
‫为了有更多的时间, 正如你所看到的, 这是相当接近｡
‫我再给予自己10秒钟｡
‫所以我把它拖了过来｡
‫我来了, 我阻止了它｡
‫于是我按下了回车键｡
‫好的
‫所以这是一个相当大的挑战｡
‫我希望你能做到, 即使是更高级的东西｡
‫但真正有趣的是, 我还没有过多地涉及到这个计时器方法｡
‫所以如果你用了它, 那么你就明白了这一次是怎么回事还是一次上课｡
‫所以有一个类叫做timer, 你可以用它来使用timer方法, 或者使用timer.
‫它所做的就是创建一个新的计时器对象,
‫然后使用计时器回调, 计时器回调允许在每次持续时间结束时调用或执行一些代码｡
‫所以每次你在这里指定的时间段, 在我的例子中是1000毫秒, 在这个时间段结束后,
‫这个计时器回调就会被调用｡
‫所以在我的例子中, 每一秒都会调用它｡
‫这就是为什么它说视频在1/2, 2秒, 等等｡
‫这很酷, 因为现在你可以继续创建基于计时器的方法或基于计时器的程序｡
‫你可以创建一个完整的计时器, 用户可以在其中玩, 甚至比我们刚才做的更多｡
‫一般的想法是, 你创建一个新的计时器, 你创建一个计时器回调,
‫这个计时器回调方法需要一个重要的对象.
‫然后在这里你可以继续或者在花括号内, 你可以继续并定期执行你的代码｡
‫而这将是每隔这么多秒｡
‫当然, 如果你看一下这个计时器对象, 它有一个到期时间, 你可以指定它, 就是这个,
‫还有一个状态, 你可以指定它｡
‫我只使用状态null｡
‫好吧, 我会的
‫原来如此｡
‫在接下来的视频中, 我们将进一步了解继承和面向对象编程｡
‫那到时见｡