我愿向天再借五百年:Java面向对象和它的三大基本特征

       

目录

        一、面向对象

        二、对象

        三、类

        四、封装、继承、多态

        1、封装

        2、继承

        3、多态

        五、抽象

        六、接口

        七、主观理解:面向对象三大特征为何是封装、继承、多态,而没有抽象、接口?


        一、面向对象

        单说“面向对象”四个字,有点迷糊,搞不清楚它到底是什么,有什么用。但加上“编程思想”两个字——面向对象的编程思想,这就明白一点点了。

        面向对象是一种编程思想,使用对象、类、封装、继承、多态等概念设计出一款类比真实世界的系统。在面向对象的思想中,子类可以继承父类的属性和方法,可以重写父类方法,也可以有自己的方法;没有足够的信息描绘对象就定义成抽象类;可以用接口实现不同接口类中的行为等。

        在上面的一段话中,提到了很多名词:对象、类、封装、继承、多态、属性、方法、抽象、接口,那么就按这些名词来讲讲面向对象到底是个什么。

        二、对象

        万物皆对象。

        怎么理解呢?为什么说“万物皆对象”?为什么可以说“万物皆对象”呢?还有对象到底是什么?是母上大人常念叨的对象吗?

        对象,客观存在的事物都是对象。比如人、比如手机、比如动物等等,可以是活的东西,也可以是死物,总之,对象有属性,有行为。

        人,有属性:姓名、性别、年龄等,有行为:学习、工作、吃饭、睡觉等。

  • 小明今年2岁了,可以自己吃饭了
  • 小李今年3岁了,可以去上幼稚园了

        手机,有属性:品牌、颜色、价格等,有行为:发短信、打电话、拍照等。

  • OPPO手机今天降价100元到手!紫色白色任君挑选,功能强大,拍摄夜景更清晰
  • 华为手机今天降价100元到手!紫色白色任君挑选,功能强大,拍摄夜景更清晰

        三、类

        类是对象的抽象,是对现实生活中一类具有共同属性和行为的事物的抽象。

        对象中的属性和行为在类中被称为成员变量和成员方法。

        四、封装、继承、多态

        1、封装

        单看字面意思来理解的话,就是把某种东西放进袋子里面封口。

        在程序中也确实是这样:把相同的属性和行为放到一个类中封口,再加上用private修饰属性,用getXxx()/setXxx()方法在外部访问属性,可以实现代码的安全性和复用性。

        2、继承

        继承就像是一个拥有袋子的人(A)要把里面的东西通过某种方式分享出来给别人(B、C、D......)一起使用。

  • 可以分享给多个人(B、C、D......)
  • 而B、C、D等人只能从A手中拿东西,不能再从别人手中拿东西
  • 某种方式——继承extends
  • B、C、D等人拿到东西后可以在这些东西的基础上添加自己的东西——添加属性、行为,方法重写

        3、多态

        同一个对象,在不同时刻表现出来的不同形态。就是一个类的多种形式。

        前提是:

  • 有继承/实现关系——public class Cat extends Animal {}
  • 有方法重写
  • 有父类引用指向子类对象——Animal animal = new Cat();

        猫类Cat继承了动物类Animal,并重写了动物类中的方法,这个时候我们在主函数里面用父类引用指向子类对象:Animal animal = new Cat(); ,访问animal的属性就看动物类Animal中有没有该属性,调用animal的方法就看猫类Cat中是否重写了该方法。执行的结果就是一个多态的显示。

        也正是因为调用animal的方法需要判断猫类Cat中是否有重写该方法,如果没有就不能调用,也就是说如果猫类Cat中如果有自己的方法是没办法通过父类指向的子类对象来调用的,需要将该子类对象从父类转型为子类(这叫做向下转型),这样才能用animal执行猫类Cat中的独特方法。

        五、抽象

        抽象类必须使用abstract关键字修饰。

        抽象类中可以放有方法体的方法,也可以没有抽象方法。

        抽象类的子类(普通类),要么重写抽象类中的所有抽象方法,要么它自己就是抽象类,可以不重写所有的抽象方法。

        抽象类不能直接实例化,但可以通过子类的多态来实例化。

参考链接:java中抽象类一般什么时候用到,用抽象类有什么好处?_maguanghui_2012的专栏-CSDN博客_抽象类什么时候用

        六、接口

        接口用关键字interface修饰。

        接口与类之间不说继承extends,说“类 实现implements 接口”。

        类 实现 接口1,接口2,接口3,...... ——> Son implements Father,Mother,Grandma{} 。

        接口与接口之间可以继承extends,有单继承、多继承。

        接口中只有用public static final修饰的常量。

        接口中只有用public abstract修饰抽象方法。

区别 接口类 抽象类
设计理念 对行为抽象,主要是行为。 对类抽象,包括属性、行为。
成员 只有常量和抽象方法。 有变量,常量;有构造方法;有抽象方法,有非抽象方法。
关系

1、接口与接口之间,可以单继承,也可以多继承。

2、类与接口之间,可以单实现,也可以多实现

类与类之间可以单继承。

        

        七、主观理解:面向对象三大特征为何是封装、继承、多态,而没有抽象、接口?

        对象,是具体存在现实中的事物,比如人,比如手机。

        那么如果将对象用代码表示出来呢?首先我们要知道我们表示的是什么?我们表示的是人做事,那么是什么人呢?小李?小华?还是李华?人又在做在什么事呢?吃饭?睡觉?这些都是代码要表示出来的。由此引申出两个概念:属性和行为。

        仍旧以人为例,属性就是人的姓名、性别、年龄等,是这个人所具有的特征。行为就是对象的操作,可以有吃饭、工作、学习、睡觉等。我们确定了一个对象的属性和行为之后,就可以用代码来构建了,用不同的属性搭配不同的行为。

        重点来了,既然可以用代码来表示人这个对象,将人抽象映射为代码,那么其他对象呢?猫、狗、电风扇等其他真实世界存在的对象。其实他们都可以映射到代码中用代码表示,但是如果一个一个来就太麻烦了。数学中解方程组的时候有一个把相同未知数的放一起加减的思想。那么我们也可以把相同的属性和行为“封装”到一个类中,需要用的时候“继承”出来用就是了。由于实际上我们是需要多个不同的对象,就像在一堂课程中,学生应该认真学习,但实际上会有学生玩游戏,映射到代码上,就是继承了封装的类后,一个类会出现多种表现形式,多态可以理解为方法重写。

        由于抽象类中要求子类必须重写父类中的抽象方法或者子类自己必须是抽象类,我更多的是把抽象类看成多态这个特征的一个扩展。因为多态是说父类指向的子类不能执行子类自己独有的方法,必须向下转型。

        另一个特征:接口。由于Java的继承是单继承,子类只能有一个父类,但我们有时候需要从各个不相关的类中得到他们的特点使用,所以提出了接口概念。在我看来,接口更像是面向对象的一个扩展性特征,算不得基本的特征,所以三大基本特征没有它。

猜你喜欢

转载自blog.csdn.net/weixin_60808029/article/details/121000455
今日推荐