对象三大特性:封装、继承、多态。通俗易懂!!看完还不懂来打我!!!超详细!!涉及各种重要基础

请大家仔细看完,学习要慢慢来,基础要仔细打牢!!  看完这篇面向对象还不懂的,来打我!!

一.面向对象:封装、继承、多态。原文PDF获取详情见末尾)

1.1、封装:

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

好处:1.只能通过规定的方法访问数据

      2.隐藏该类的实例细节,方便修改和实现。

A.访问修饰符

 

B.Java中的内部类:

  内部类就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

  那么问题来了:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!

内部类的作用:

  1.内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

2.内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

3.内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

内部类分类:

  1. 成员内部类
  2. 静态内部类
  3. 方法内部类
  4. 匿名内部类

 

1.2、继承:

  继承是类与类的一种关系,是一种”is a”的关系。比如“狗”继承“动物”,这里动物类是狗类的父类或者基类,狗类是动物类的子类或者派生类。

好处:

子类拥有父类的所有属性和方法(除了Private修饰的属性不能拥有)从而实现了代码的复用;

  1. 方法的重写

子类如果对继承的父类的方法不满意(不合适),可以自己编写继承的方法,这种方式就成为方法的重写,当调用方法时会优先调用子类的方法。

重写要注意,以下三个条件都是保持一样:

  1. 返回值类型
  2. 方法名
  3. 参数类型及个数

比如动物会叫,那么狗叫,a.都返回叫;b.都是叫的方法;c.都是需要相同类型的发生器官

 

方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段。

 

继承的初始化顺序

父类对象属性初始化—》父类对象构造方法—》子类对象属性初始化—》子类对象构造方法

 

C、Final关键字

使用final关键字做标识有“最终的”含义:

  1. final修饰类,该类不许被继承。
  2. final修饰方法,该方法不能被重写
  3. final修饰属性,只能在初始化赋值或者构造方法赋值(只能选1)
  4. final修饰遍历,只能赋值一次,在声明遍历的时候赋值,赋值完就变为了变量

 

1.3、多态:

  多态是对象的多种形态。

  Java中里的多态主要表现在两个方面:

引用多态:

父类的引用指向本类的对象;

父类的引用可以指向子类的对象

方法多态:

当我们父类的引用指向不同的子对象时,他们调用的方法也是多态的。

创建本类对象时,调用的方法为本类方法;

创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

但是多态使用的时候应该注意:如果子类编写了一个父类不存在的方法,那么就不能通过父类的引用来调用这个方法。

注意:继承多态的基础

A、引用类型转换

1.向上类型转换(隐式/自动类型转换),是小类型转换到大类型。

 

2向下类型转换(强制类型转换),是大类型转换到小类型(有风险,可能出现数据溢出)。

 

但是,如果父类没有引用该子类,那么是不能向下类型转换,虽然编译器不报错,但是运行会出错:

 

还有一种情况也无法强制,父类引用是指向一个子类,之后又去强转为其他类中是不行的。

 

是因为程序animal开辟的是Dog类型的内存空间,这与Cat类型内存空间不匹配,所以无法正常转换。

instanceof运算符

instanceof是JAVA的一个二元操作符,和==,>,<是同一类。他的作用是测试他左边的对象是否是它右边的类的实例,返回boolean类型的数据。

 

B、抽象类

定义:抽象类前使用abstract关键字修饰,则该类为抽象类。

使用抽象类要注意以下几点:

  1. 抽象类是约束子类必须有什么方法,而并不关注子类如何实现这些方法。
  2. 抽象类应用场景:

           a.在某些情况下,某个父类只是知道其子类应该包含什么方法,但无法知道具体实现内容(实现多态

           b.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免子类设计的随意性。  

     3.抽象类定义抽象方法,只是声明,不需要实现。

 

     4.抽象类中也可以包含其他普通的方法,也可以没有抽象方法。

 

     5.抽象类不能直接创建,可以定义引用变量来指向子类对象,来实现抽象方法。

 

C、接口

1.概念

  接口可以理解为一种特殊的类,由全局变量和公共的抽象方法所组成。

  如果说类是一种具体实现体,那么接口定义某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里面方法的实现细节,它只规定这些类里必须提供的某些方法。(与抽象类相似)

2.基本语法

 

3.为什么要有接口

Java中一个类只能继承一个父类,是不够灵活,通过实现多个接口可以补充。

  注意:如果要继承父类,继承父类必须在实现接口之前,即extends关键字必须在Implements关键字之前。

D、接口和匿名内部类配合使用

接口在使用过程中经常和匿名内部类配合使用。匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称。

 

 

 

1.4、抽象类和接口的区别

(1)语法层面上的区别

  1.一个类只能继承一个抽象类,而一个类却可以实现多个接口。

  2.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;所以不能实现类中不能重新定义,也不能改变其值;而抽象类成员变量是frendly,其值可以在子类中修改。  

  3.抽象方法中可以有非抽象方法,接口中则不能有非抽象办法。

  4.接口中可以省略abstract,抽象类是不能省略的。

  5.接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

 

(2)设计层面上的区别

  1)抽象类是对类的一种抽象,而接口是对行为的抽象。比如飞机和鸟,他们都会飞,我们会把飞机设计为一个类,鸟会设计一个类,但是不会把飞行设计为一个类,只会把飞行设计为一个接口,然后类去实现自己的飞行方式。其他不能飞的东西就不能实现这个接口。

 

更加详细的程序演示,请见下链接:

https://blog.csdn.net/qq_40262372/article/details/109200239

 

二、JAVA基础高频面试题:

https://blog.csdn.net/qq_40262372/article/details/112556249

 

B站视频讲解面向对象

https://www.bilibili.com/video/BV1Rz4y1m7Lv

 

B站视频讲解如何三个月学习JAVA拿到实习Offer:

https://www.bilibili.com/video/BV1dV411t71K

 

想要在学习的道路上和更多的小伙伴们交流讨论

请加Q群:725936761   

期待每一位努力学习的小伙伴加入

我们一起朝着目标加油!加油!                                         

想要了解更多请关注微信公众号:万小猿  

回复“面试”即可获取原文PDF文件

                                                                                                                              

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值