JAVA SE(基础 第3篇) 面向对象编程(中级)

一、封装

1. 封装:隐藏实现细节; 可以对数据进行验证,保证安全合理。

把抽象出来的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。

2.封装实现步骤:

  • 将属性私有化

  • 提供一个公共的set方法,用于对属性判断并赋值

  • 提供一个公共的get方法,用于获取属性的值

 

二、继承

1.  继承:代码的复用性提高了; 代码的扩展性和维护性提高了。

 

2.继承细节:

  • 子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过父类提供公共方法访问。

  • 子类必须调用父类的构造器,完成父类的初始化。

  • 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。

  • java所有类都是Object的子类

  • 父类构造器的调用不仅限于直接父类,将一直向上追溯到Object类(顶级父类)

  • 子类最多只能继承一个父类(直接继承),即单继承。

  • 不能滥用继承,子类和父类之间必须满足is-a的逻辑关系。

3.   继承本质: 

 

4.super: 代表父类的引用,用于访问父类的属性,方法,构造器。

  • 访问父类的属性,但不能访问父类私有的属性。

  • 访问父类的方法,但不能访问父类的私有方法。(super.方法名)

  • 访问父类的构造器,只能放在构造器的第一句

5.super细节:

  • 分工明确,父类属性由父类初始化,子类属性由子类初始化

  • 当子类中有和父类中的成员重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super,this,直接访问是一样的效果。

  • super的访问不限于直接父类,如果爷类和本类中有同名的成员,也可以用super去访问爷类的成员;如果上级类中都有同名的成员,使用super遵循就近原则,也要遵循访问权限的相关规则。

 

三、 

1.方法重写(覆盖override):子类有一个方法,和父类的某个方法的名称,返回类型,参数一样。

2.方法重写细节:

  • 子类方法的参数,方法名名称,要和父类方法的参数,方法名称完全一样。

  • 子类方法的返回类型和父类的返回类型一样,或者是父类的返回类型的子类。

  • 子类方法不能缩小父类方法的权限。

四、多态

1.  多态:方法或对象具有多种形态,是面向对象的基本三大特征,是建立在封装和继承的基础之上。

2.对象的多态: 

  • 一个对象的编译类型和运行类型可以不一致

  • 编译类型在定义对象时,就确定了,不能改变

  • 运行类型可以变化的

  • 编译类型看定义时=号的左边,运行类型=号的右边

  • Animal animal=new Dog();    编译类型是Animal  ,运行类型是Dog().

3.  多态细节:

  • 多态的前提是两个对象是继承关系。

  • 多态的向上转型:

  • 父类的引用指向了子类的对象:

  • 可以调用父类的所有成员(遵守访问权限)

  • 但是不能调用子类的特有的成员,因为在编译阶段,能调用哪些成员,是由编译类型决定的。

  • 最终的运行效果还要看子类的具体实现,即调用方法时,按照从子类开始查找方法,然后调用。

            

4.多态的向下转型:

  • 语法:子类类型    引用名=(子类类型)  父类引用

  • Cat  cat=(Cat) animal;

  • 只能强转父类的引用,不能强转父类的对象

  • 要求父类的引用必须指向的是当前目标类型的对象

  • 当向下转型后,可以调用子类类型中所有的成员

  • 属性没有重写之说,属性的值看编译类型

  • instanceOf 比较操作符,用于判断对象的运行类型 是否为XX类型或XX类型的子类型

5.  java动态绑定机制(重点)

  • 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定

  • 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用

6.多态数组: 数组的定义类型为父类类型,里面保存的实际元素类型为子类类型。

 

 

7.多态参数: 方法定义的形参类型为父类类型,实参类型允许为子类类型。

 五、 

1.Object类详解:

(1)==和equals的对比:

  • == 既可以判断基本类型,又可以判断引用类型

  • == 是一个比较运算符

  • ==  如果判断基本类型,判断的是值是否相等

  • ==  如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象

(2)equals方法:

  • 是Object类中的方法,只能判断引用类型

  • 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等

 (3)hashCode方法:

(4) toString方法:

  • 默认返回,全类名 + @ +哈希值的十六进制,子类往往重写toString方法,用于返回对象的属性信息

  • 重写toString方法,打印对象或者拼接对象时,都会自动调用该对象的toString形式

  • 当直接输出一个对象时,toString方法会被默认的调用

 (5)finalize方法: 

 

2. 断点调试:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java面相对象

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

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

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

打赏作者

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

抵扣说明:

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

余额充值