Liskov's Substitution Principle | SOLID Design Principles (ep 1 part 1)

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 ม.ค. 2025

ความคิดเห็น • 380

  • @KawsarJami
    @KawsarJami 2 ปีที่แล้ว +20

    I fully understood LSP when you said on 10:57 "they're trying to show us when we should not use Inheritance and when we shouldn't"

    • @abdullahbhojani4772
      @abdullahbhojani4772 2 ปีที่แล้ว

      exactly!

    • @linjustek
      @linjustek 2 ปีที่แล้ว

      So the quote states, that we shouldn't use inheritance :D Or there is an error. :D. LSP is says that we should adhere to method argument and return types, when using implementation or when extending abstract declarations or overrides. Usually when you do not do that, but implement Interface with type declarations you get Type Error. 🙂
      And we have to understand that type declaration can be abstract or interface, so child classes can be a fit for as an argument or return type.

  • @MrWilde
    @MrWilde 3 ปีที่แล้ว +16

    I have been watching online training videos for more than 15 years and the you can spot a great teacher when they have as much energy and enthusiasm as you do. Fantastic video

  • @NdamuleloNemakh
    @NdamuleloNemakh 5 ปีที่แล้ว +111

    So basically it's, "whatever the parent can do, the descendants should be able to do that [and more]"?

    • @MilaBarross
      @MilaBarross 4 ปีที่แล้ว +1

      Omg, thanks a lot!

    • @lordmorgoth7
      @lordmorgoth7 3 ปีที่แล้ว +20

      it's, "whatever the parent can do, the descendants should at least be able to do that"

    • @karthikeyancseskcet
      @karthikeyancseskcet 3 ปีที่แล้ว

      @@lordmorgoth7 great words

    • @soumavanag5025
      @soumavanag5025 3 ปีที่แล้ว

      @@lordmorgoth7 golden words

    • @ipodtouch470
      @ipodtouch470 9 หลายเดือนก่อน

      Yes but the big caveat is just because the child must do what the parent is able to do does not mean the child has to do it in the same fashion

  • @McSeeMo_
    @McSeeMo_ 4 ปีที่แล้ว +41

    I imagine with the actual viral context you may have spare time to continue this series ! The crowd ask for it!

  • @waelsalama84
    @waelsalama84 ปีที่แล้ว +12

    Hey Christopher, Hope you're very fine!
    I got shocked why did you stop this serious.. where are other parts..??
    You're awesome teacher and really you've the skill of explain things in a very clear and easy way..
    please don't stop producing these kinds of videos.
    waiting for other parts .. really in a big need to them .. really appreciate your efforts .. Keep it up!

  • @SakethSusarla
    @SakethSusarla 4 ปีที่แล้ว +71

    unique perspective and wonderful deconstruction, thanks for sharing :)
    it's 2020, still waiting for part 2...

    • @ringoaikocascade
      @ringoaikocascade 3 ปีที่แล้ว +7

      I am so excited for the part 2. Especially for the past several years I've been avoiding variance, covariance etc and could really use his intuitive explanation.

    • @michor10
      @michor10 2 ปีที่แล้ว +5

      Yup, we're all waiting for the rest.

    • @jfilipcic
      @jfilipcic 2 ปีที่แล้ว +5

      Still waiting

    •  2 ปีที่แล้ว +6

      Is part 2 ever coming? We are all looking forward to it!

    • @davidzhou9834
      @davidzhou9834 2 ปีที่แล้ว +3

      It's 2022

  • @radu5log76
    @radu5log76 7 ปีที่แล้ว +7

    Thank you. You have really helped me understand Design Patterns and now SOLID.
    You are not assuming we know what you're talking about and that really helps get your knowledge across.

    • @ChristopherOkhravi
      @ChristopherOkhravi  7 ปีที่แล้ว +3

      Thanks! Your comment is super helpful :) Much appreciated :) Thanks for watching and for the feedback :)

  • @RocckeFella
    @RocckeFella 3 ปีที่แล้ว +9

    Bro you are doing a really good job. I really love the way you explain things.. more power to you.

  • @kinvain
    @kinvain 4 ปีที่แล้ว

    Wow! It takes you only 16 minutes to explain me Liskov principle and finally I can understand it. You are simply amazing!

  • @schmidtlach
    @schmidtlach 25 วันที่ผ่านมา

    Good and funny. Christopher has a nice way of explaining difficult concepts in simple terms. I loved the video.

  • @MontagoDK
    @MontagoDK 6 ปีที่แล้ว +174

    part 2 ?

  • @TheLifeRockss
    @TheLifeRockss 6 ปีที่แล้ว +39

    2018 almost finished.. still no part 2? you can't do that to us mate :-)... Imagine Game of Thrones not releasing season 8

    • @hiteshchalise3988
      @hiteshchalise3988 5 ปีที่แล้ว +18

      now after watching season 8, I wish they didn't released it. lol

    • @avnishsinghtomar7783
      @avnishsinghtomar7783 5 ปีที่แล้ว +7

      we would have lived without season 8.

  • @hana-games
    @hana-games 2 ปีที่แล้ว +3

    part 2 to save my life

  • @cehdmoy
    @cehdmoy 6 ปีที่แล้ว +42

    Break Liskov is too easy, that's another reason because we should not use inheritance just for "reuse" code porpuse. Well if you know what are u doing, please feel free to use inheritance. But even Efective Java encurage developer to prefer composition instead of inheritance. My point is when we use inheritance IMHO we are so naive and we think that we can handle it, but finally we get a dog that acts like a airplane (LOL) and we have broken Liskov.

    • @alecc8231
      @alecc8231 3 ปีที่แล้ว

      Thank you Roberto. That's quick and easy to understand.
      If inheriting from dog you end up with an airplane = breaking of the Liskov's substitution principle.
      Quick and easy to remember. LOL. From now on I'm going to use your explanation.

  • @Vendavalez
    @Vendavalez 3 ปีที่แล้ว +2

    This is one of the best explanations for this principle that I have been able to find out there. For many of them I would walk away feeling like I understood everything that was being said, but not like a I learned something that I could apply, let alone ideas on how to apply it. I would love for this series to be completed if you have the chance or for you to address the topic as part of another series.

  • @guzideesra4743
    @guzideesra4743 4 ปีที่แล้ว +4

    I swear, you should be the Dean of my University. Thank you a lot Mister Bean

  • @jctkc
    @jctkc 6 ปีที่แล้ว

    You are the best man!! I've watched all your videos about Design Patterns and now I'm watching this and your explanation is simply great!. Thanks a lot!

  • @yawar110
    @yawar110 6 ปีที่แล้ว +2

    Gist: The subtype MUST be able to do what its base type can do - Excellent clip! Keep posting good stuff.

  • @RamKumar-kv1fx
    @RamKumar-kv1fx 4 ปีที่แล้ว

    I though I knew Liskov's Substitution Principle for around a year but its only today I understand it correctly. Thank you very much Christopher Okhravi

  • @giveexamples
    @giveexamples 7 ปีที่แล้ว

    Learn the most difficult things while your brain stopped and doesn't work with Cristopher's magical videos. Thank you man.

  • @StuartLoria
    @StuartLoria 4 ปีที่แล้ว +1

    When I study I vocalize my ideas similar to how Christopher conducts his presentations. I love the demystification of concepts in order to allow more people to get the job done, and enjoy engineering, no reason to be selfish or arrogant, these youtubers are fighting the good fight I think.

  • @rupn9633
    @rupn9633 3 ปีที่แล้ว

    Very Unique way of explanation, I have see many videos on SOLID principles , this one standout. Great!!!

  • @nitendratiwari3709
    @nitendratiwari3709 2 ปีที่แล้ว

    Hi Chris, really nice explanation, but you know best part @ 5:36 which my daughter of 3.5 years Liked a Lot, She didn't understand the principle but she likes ur expression a lot ...!!!,
    Thanks

  • @salmanahmedkhan3979
    @salmanahmedkhan3979 2 ปีที่แล้ว

    Preparing for exam and this masterpiece is pop up. Great Explanation

  • @jg5645
    @jg5645 5 ปีที่แล้ว +37

    Chris

    • @a.rohimsama7222
      @a.rohimsama7222 5 ปีที่แล้ว +1

      Yeah, the same here I like him.

  • @shubhankarpaul2740
    @shubhankarpaul2740 3 ปีที่แล้ว

    10:08 is what you have been looking for .... EXCELLENT !!!

  • @janabodu3392
    @janabodu3392 3 ปีที่แล้ว +1

    Mr Bean mastered design principles and became Christopher Okhravi...Great Explanation ...Thank you..

  • @MultiPauwel
    @MultiPauwel 6 ปีที่แล้ว

    Top Notch explanation, i'm not a native english speaker and i followed some guides on PluralSight, came here because i still didn't get.
    Now i heared u talking, it's darn simpel, once u get it!
    Thanks alot!

  • @ЕдвардГригорян-н6к
    @ЕдвардГригорян-н6к 2 ปีที่แล้ว

    the best explanation pf lsp. Please return to make these videos. You are one of the best teacher on youtube

  • @vunguyenhoang3704
    @vunguyenhoang3704 3 ปีที่แล้ว

    really hope to see the next part. You are amazing broo

  • @shaimaaaltaay5183
    @shaimaaaltaay5183 6 ปีที่แล้ว +2

    OMG thank you so much I have an exam on Wednesday and I was lost with LSP principle.... I never enjoyed a lesson this much before thank you again

    • @ChristopherOkhravi
      @ChristopherOkhravi  6 ปีที่แล้ว

      Aha. Great stuff :) How convenient :) :) Best of luck on the exam! 👍👍

    • @shaimaaaltaay5183
      @shaimaaaltaay5183 6 ปีที่แล้ว

      Christopher Okhravi I explained LSP to my friends before exam and they were like “oh that’s it 😮 it’s so easy” and I was like “yeah can you imagine “ and then gave them the link to your TH-cam channel 😁
      BTW DIP came in the exam not LSP 😂
      except that scenario question with classes and DIP example I think I did well

  • @zbigniewcwiakalski7253
    @zbigniewcwiakalski7253 3 ปีที่แล้ว +1

    Ech. That would be super cool to hear more about this in the next episode .... Hope it's going to be created eventually ;) regards

  • @driden1987
    @driden1987 3 ปีที่แล้ว

    Cristopher!! What will it take to have you create the video about covariance and contravariance ?

  • @ooredroxoo
    @ooredroxoo 7 ปีที่แล้ว +3

    The funny thing is that you had a video on Liskov Substitution Principle posted on July 2016, that was the video that made me discovery your channel.

    • @ChristopherOkhravi
      @ChristopherOkhravi  7 ปีที่แล้ว

      Haha :) Awesome! Super thanks for sticking around :D :D

  • @tsvetanpetrov5971
    @tsvetanpetrov5971 3 ปีที่แล้ว

    Amazing! Usually, this is one of the hardest questions during interviews. Thank you for the hard work!

  • @saurabhshukla4900
    @saurabhshukla4900 4 ปีที่แล้ว

    This video has useful content worth just 2 mins.

  • @Erdling123
    @Erdling123 6 ปีที่แล้ว +1

    Not only a great explanation, this was entertaining as well.

  • @jeffdosser4251
    @jeffdosser4251 7 ปีที่แล้ว

    Your vids are great. More ppl should be watching them.

  • @shiblimohammadarafat6602
    @shiblimohammadarafat6602 6 ปีที่แล้ว

    It's indeed a great lecture! I have been trying to understand Liskov's Substitution Principle for a long time. Obviously I had some understandings which is correct but I also had some confusions as well. But your explanation is so clear that now I don't have any confusion about it. Thank you so much.

  • @c4stus
    @c4stus 7 ปีที่แล้ว

    Great as always Christopher, love your videos and your way of explaining stuff, don't stop please :)

  • @mufizshaikh8439
    @mufizshaikh8439 4 ปีที่แล้ว

    It was very easy to understand with the help of your video. Thank you

  • @harishnamjoshi
    @harishnamjoshi 7 ปีที่แล้ว

    Chris you are a savior. Just love you videos.
    Waiting for next episode. 👍

  • @taskapptaskapp3138
    @taskapptaskapp3138 7 ปีที่แล้ว

    You are great man. You should have more views. I wish you all the best, greetings from Poland. :)

  • @sunilphanimanne
    @sunilphanimanne 6 ปีที่แล้ว

    Hey @christopher okhravi, I dont think 0(phi) need not be on the type T and the subtype S, what is being said (from my understanding) is - If there exists a property (on some arbitrary class or type) which takes T as an input then the same property should work even if invoked with the subtypes of T i.e S here. I hope you agree with me.

    • @sunilphanimanne
      @sunilphanimanne 6 ปีที่แล้ว

      ... and to add to that, the 0(phi) can be present in T and S, there is nothing wrong in it though!

  • @cetiah
    @cetiah 4 ปีที่แล้ว +2

    I just recently learned from one of your videos that the snail would speak, but it would have a NullSpeaking behavior that's returned when you run Speak() on the snail.

  • @sunnyshekhar862
    @sunnyshekhar862 5 ปีที่แล้ว +1

    Just discovered your channel... And my my, What a fine job you have done explaining these concepts. I am from a non-Computer Science Background and even I was able to understand the logic in one go !!
    Seems like it's been more than an year that you did the 1st episode... Not sure why you dropped the Series... but like me many would love to see the 2nd and subsequent episodes in this series. 😇

  • @aymanshaawat
    @aymanshaawat 5 ปีที่แล้ว +2

    I really hope that you continue this series.
    Or at least start a new one talking about the same topic.

  • @mrinaldhawan3959
    @mrinaldhawan3959 2 ปีที่แล้ว

    Great videos man! Complete this series. I have already watched the Code Walks of SOLID.
    This came to my mind while watching this video. Not sure if this is a correct analogy!
    At 14:17 when Chris holds the RED and GREEN Markers on screen, We believe that GREEN is Subtype of RED. Lets suppose the Marker Caps are properties of the Markers. If we remove the Cap from RED and replace it with GREEN marker cap, it should fit perfectly as GREEN is truly subtype of RED.

  • @suhas002
    @suhas002 6 ปีที่แล้ว

    Great work man .. you are making things easy to understand.. waiting for other principles ..

  • @irgatyus3090
    @irgatyus3090 7 ปีที่แล้ว +1

    Thanks a lot man for your visionary approach. I'm about to get my dream job thanks to your educational channel. Keep up the good work.

    • @ChristopherOkhravi
      @ChristopherOkhravi  7 ปีที่แล้ว

      Wow! Thats cool! Congratulations for the new job! 🙂🙂

  • @davidecullen1
    @davidecullen1 5 ปีที่แล้ว +2

    Thank you! You helped me understand this principle the day before an interview!!

  • @0xlilx0
    @0xlilx0 5 ปีที่แล้ว

    Great explanation! Been reading about it for an hour and nothing made sense, but your video made it clear :)

  • @JaspreetChhabra
    @JaspreetChhabra 3 ปีที่แล้ว

    One of the best explanations...

  • @naito016
    @naito016 4 ปีที่แล้ว

    2020 year, after a lot of videos listening blah blah and blah about Liskov's Substitution, finally understand the Liskov Substitution Principle then I Think this video was awesome need the next one, it's pretty weird that TH-cam is not showing part two on following video, go to authors channel, looking for the part two that never comes.

  • @cepi24
    @cepi24 2 ปีที่แล้ว

    Sir you are doing great job and seems you are enjoying it

  • @ronironion
    @ronironion 4 ปีที่แล้ว

    Awesome man! So easily served!

  • @opsherx
    @opsherx 2 ปีที่แล้ว

    this guy is so excited hahah
    thank you man

  • @AdrianBlogs
    @AdrianBlogs 5 ปีที่แล้ว

    I like your way of speaking you also speak English very well and I understand what you say

  • @michaelhaddad2190
    @michaelhaddad2190 7 ปีที่แล้ว +3

    Thank's a lot! I thought it's hard to imagine how we could possibly break this principle, until one day I tried to add an instant messages feature to my program, and I created a "Participant" class, which inherited from "User". Then I realized that although a "Participant" IS A "User", I could not substitute "user" with "participant" anywhere in the program, and if by accident I do it in the wrong place, things will get really bad. That is when I realized that inheritance actually doesn't represent an "IS A" relationship, but rather an "IS A SPECIFICATION OF" relationship.

    • @ChristopherOkhravi
      @ChristopherOkhravi  7 ปีที่แล้ว +1

      This is a great example! Thank you very much for sharing!! :) :) Super helpful!
      But when you said “specification”, did you actually mean “specialization” rather than “specification”? Or, if the latter, could you please elaborate?
      Thanks again! :) :)

    • @michaelhaddad2190
      @michaelhaddad2190 7 ปีที่แล้ว +1

      Thanks! I did mean "specialization". Sorry... My English is not great :P

  • @danielmilewski7659
    @danielmilewski7659 2 ปีที่แล้ว

    cannot wait for part 2 !!!!

  • @volkancoskun6934
    @volkancoskun6934 7 ปีที่แล้ว

    This is excellent. I look forward to new part. You're awesome

  • @IlyaShap
    @IlyaShap 2 ปีที่แล้ว

    Wow! You’re an awesome teacher. Thank you so much!

  • @soufrk
    @soufrk 7 ปีที่แล้ว +1

    Really makes it's simpler to understand !! Way to go

  • @felipeignaciocastrojara5065
    @felipeignaciocastrojara5065 3 ปีที่แล้ว

    THANKS bro, love from Chile!

  • @aprendemusica1931
    @aprendemusica1931 2 ปีที่แล้ว

    Love his passion teaching 💞

  • @saurabhsuman4960
    @saurabhsuman4960 4 ปีที่แล้ว

    You are amazing. I love the way you explain. 👌

  • @divyeshkumarbalar7732
    @divyeshkumarbalar7732 11 หลายเดือนก่อน

    its been 4 years since i commented, still waiting for part 2 :)

  • @asharnavya
    @asharnavya 6 ปีที่แล้ว +1

    Really great way of teaching the things, i loved to learn from you.

  • @marcodallaba
    @marcodallaba 5 ปีที่แล้ว

    Please continue this series, you're awesome!

  • @Name-lt2tz
    @Name-lt2tz 7 ปีที่แล้ว

    12:02 - if S inherits from T, how it can not have T methods? It is not possible, at least in PHP. Also I do not understand why you call methods as properties? For me property sounds like class variable. This was confusing.
    Or maybe this principle means that you cannot have empty methods. Like if there is parent class called Animal and has method speak. And we create Snail which extends Animal, and automatically snail has method speak() but we make it empty, or it is empty in Animal class - then maybe this is bad?

  • @kevinbenavides92
    @kevinbenavides92 6 ปีที่แล้ว

    Thank you Chris. Please continue this series on the SOLID principle if possible. Your the best.

    • @ChristopherOkhravi
      @ChristopherOkhravi  6 ปีที่แล้ว

      Thanks! Will do :) Thanks for watching :)

    • @UrzaRage778
      @UrzaRage778 5 ปีที่แล้ว

      You're fantastic at explaining things! (Much like Tim Corey) - where'd you go?!

  • @PurpleSplash24
    @PurpleSplash24 7 ปีที่แล้ว

    Excellent explanation. Eagerly waiting for videos on remaining 4 principles.

  • @bryancorea678
    @bryancorea678 3 ปีที่แล้ว

    Please continue this amazing videos

  • @pawekrzyzak4345
    @pawekrzyzak4345 4 ปีที่แล้ว

    I have still waited for the next one!

  • @abhilashbandi3866
    @abhilashbandi3866 7 ปีที่แล้ว +1

    Thanks for this :)
    I believe understanding SOLID will help in understanding Design patterns a lot better.

    • @ChristopherOkhravi
      @ChristopherOkhravi  7 ปีที่แล้ว

      Thanks! I’m glad to hear :) It’s all connected indeed! :)

  • @mevadavatsal
    @mevadavatsal 6 ปีที่แล้ว

    Thanks for the in-depth explanation. BTW @ 7:06 : the symbol is "Phi": en.wikipedia.org/wiki/Phi

  • @lda573
    @lda573 6 ปีที่แล้ว

    When you started to use different colors, Evrika! LSP started to make sense! good job! thank you

  • @amirbeheshti9010
    @amirbeheshti9010 ปีที่แล้ว

    If you state something is true about the PARENT type, It HAS to be true all the way down the chain ...
    Neat👌

  • @iwanttolearn8939
    @iwanttolearn8939 7 ปีที่แล้ว +2

    Thank you sir! :) I'll share this with my friends. very helpful.

    • @ChristopherOkhravi
      @ChristopherOkhravi  7 ปีที่แล้ว

      Yeehaw! Thank you very much :) And thank you for watching :)

  • @rubenbasketpalencia
    @rubenbasketpalencia 6 ปีที่แล้ว

    You can also talk about he exception throwing. A subclass mustn't throw an exception that it superclass can not throw. (correct me if I am wrong)
    Thanks for your videos!

  • @LucidFabrics
    @LucidFabrics 3 ปีที่แล้ว

    Any chance that you could do a continuation for that video ? Many thanks!

  • @firstlast1947
    @firstlast1947 3 ปีที่แล้ว

    One thing I never understood about Liskov Substitution Principle is why it exists? I thought a core part of Object Oriented programming is that if you have a reference to a base class, it can refer to an instance of the base class or any derived class, since all of the derived classes "IS-A" base class. Or is Liskov the person who came up with that principle in Object Oriented programming, and that's why it is named after her? Otherwise, why give a name to something that was already a part of Object Oriented programming to begin with?
    It would be like someone deciding to name addition the "Bubba Joe adding principle", when addition already existed before Bubba Joe came along to give addition his name.

  • @slobom.6744
    @slobom.6744 3 ปีที่แล้ว

    The force is with you, all Jedis should be ashamed of themselves! :)

  • @gunarsekaran
    @gunarsekaran 2 ปีที่แล้ว

    I watch many videos to understand about LSP, Finally i am got my inner peace🍻

  • @raymondho2
    @raymondho2 7 ปีที่แล้ว

    Thank you so much! This is a great video to explain horrible LSP and really helped me to understand it :)

  • @johnconnor9787
    @johnconnor9787 5 ปีที่แล้ว +1

    Please continue making these videos!)

  • @Name-lt2tz
    @Name-lt2tz 7 ปีที่แล้ว

    And also question - "Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.)"
    so if we have class Animal and we have Cat which extends animal. And animal has method speak() which is empty and Cat has method speak() which shows 'miaw' in the screen. But we are altering the property (as I see wikipedia also calls methods as properties) of Animal and break corretness of the program. Lets say correct program was that speak() does not show anything to screen. And when we replaced Animal with Cat - program works incorrectly - shows 'miaw'. So then qestion is - how do we solve this problem that we want cat to say 'miaw' with the speak() method, because it makes sense that speak() method shows 'miaw' but at the same time not break this principle? Or we should not overwrite the methods? THen again - why is this feature in the language?

  • @RobinHenniges
    @RobinHenniges 5 ปีที่แล้ว +1

    TL;TW, --> start at 10:09 is enought :)

  • @theisegeberg
    @theisegeberg 6 ปีที่แล้ว

    While watching your design patterns videos (I watched all of them, all of the way through..) - I wished that you would do the SOLID principles as well, and here we are :)

  • @Rajmanov
    @Rajmanov 4 ปีที่แล้ว

    Man, your videos are awesome, all of them I have watched them and I’m very happy with your content, the problem is that you just stop, there are hundreds of people like me trying to reach you to tell you, please do more, even if they are paid videos I will give you my money, you can sell them Udemy, patron or TH-cam itself. I will be very grateful, but not only me, a lot of people.
    Thanks!

  • @rohitkalya
    @rohitkalya 3 ปีที่แล้ว

    Hi Chrisopher, Can you please post the 2nd part of this video.

  • @georgebockari289
    @georgebockari289 6 ปีที่แล้ว +2

    I'd really love to see you pick this back up.

  • @swatisingh8399
    @swatisingh8399 6 ปีที่แล้ว

    All your explanations are so good and simple , its like listening to a story , so interesting , although I see you don't have a part 2 for this :( , requested by a lot of users

  • @tusherkhan7531
    @tusherkhan7531 3 ปีที่แล้ว

    Thanks for making it easy!

  • @misetro12345
    @misetro12345 10 หลายเดือนก่อน

    Christopher would like a part 2 for this video

  • @the_unico
    @the_unico 2 ปีที่แล้ว

    Never knew Mr. Bean / Rowan Atkinson is a programmer. Great Content bro

  • @meetrjsingh
    @meetrjsingh 5 ปีที่แล้ว

    Thank you for the wonderful explanation

  • @B-Billy
    @B-Billy 7 ปีที่แล้ว +1

    Woow... That was awesome
    Please keep it up.. Great job
    And yeah, thanks for sharing.
    BTW, I missed that cat 🐈 LOL

  • @soniajain07
    @soniajain07 5 ปีที่แล้ว

    you rock! Looking forward for your pat2

  • @Name-lt2tz
    @Name-lt2tz 7 ปีที่แล้ว

    Also question - if we want Snail to not have method speak, but snail is still animal, then maybe we just remove speak method from the Animal class. And maybe create some class SpeakingAnimal which has speak mehtod() which extends Animal. And since Animal will not have speak() method, we can make Snail extend Animal.