第5章:深入面向对象

第1节:访问权限控制

类的访问控制权限有几种?分别有什么限制?
类成员的访问控制权限有几种?分别有什么限制?
Java中封装如何实现?

Java中的类根据是否提供public关键字来划分为两种权限:公开的类能够被所有的其他类访问,而非公开的类(default)只能被同一个包中的其他类访问
Java中的封装是将通过控制成员变量访问权限,公开变量的读取和设置方法来实现的
类成员的访问控制分为4中类型,分别是公开的、缺省的、受保护的和私有的:
在这里插入图片描述

第2节:继承

类的继承关系由什么来确定?Java对类的继承有什么限制?
什么叫方法的覆盖?方法的覆盖有什么作用?
如果实现了类的继承关系,构建对象时,构造方法的调用顺序是什么?
如果父类不存在无参的构造方法,子类应该作何特殊处理?
super和this有什么区别?

类的继承由关键字extends确定,Java语言为单亲继承,及一个子类只能有一个父类,而一个父类可以有多个子类
子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖
当构建子类对象时会优先隐式自动调用父类的无参构造方法,而且这个构建调用过程是从父类“向外”递归扩散的,也就是从父类开始向子类一级一级地完成构建,即如果C继承自B,而B继承自A,那么构建C的对象时,会先调用A的构造方法,然后调用B的构造方法,最后调用C的构造方法,以此类推
如果没有无参的父类构造方法,子类必须要使用super显示的调用父类的构造方法,而且必须是在子类构造器中做的第一件事
this引用对象自身、调用自己的构造方法,而super调用父类定义的成员变量、方法或构造方法,super不能当作引用传递给其他的调用者而this可以

第3节:多态性

多态在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法
多态存在的三个必要条件
继承
重写覆盖
对象向上造型-父类引用指向子类对象

多态的定义是什么?
父类的引用能否指向子类的对象?子类的引用能否指向父类的对象
在多态环境下,通过父类的引用调用父类和子类声明的同名成员,最终调用的是子类声明的还是父类声明的
instanceof运算符的作用是什么?

Java中多态性指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式
在多态环境中,父类的引用可以指向子类的对象,子类的引用不能指向父类的对象
在多态环境下,成员属性变量是静态绑定,因此调用成员变量时使用父类声明的版本,而普通方法(static、final、构造方法除外)是动态绑定,因此调用成员方法时使用子类声明的版本
运算符instanceof用来判断对象是否属于某个类的实例

第4节:抽象

抽象用什么关键字修饰?抽象类中必须有抽象方法吗?抽象类中能有非抽象方法吗?抽象方法必须位于抽象类中吗?
抽象类能够实例化对象吗?

Java中用abstract修饰抽象类和抽象方法,抽象方法必须位于抽象类中,抽象类中可以有非抽象方法
抽象类不可以直接实例化,只可以用来继承作为其他类的父类存在,抽象类的派生子类应该提供对其所有抽象方法的具体实现,如果抽象类的派生子类没有实现其中的所有抽象方法,那么该派生子类仍然是抽象类
抽象方法没有方法体

第5节: final修饰符

final分别作用于变量、方法和类时有什么作用?
列举一个JDK中最常用的final类

final修饰变量说明改变量为一个常量,常量必须在声明时初始化且不能再对其赋值,final修饰方法说明该方法不能被子类覆盖,final修改类说明该类不能被继承
JDK中最常用的final类是java.lang.String

第6节: static

static的成员有什么特点?

static成员和非static的成员不同,它不和某个特定的对象绑定,而是存放在独立的内存空间类的所有对象都共享这一内存地址,因此可以在没有任何对象的情况下直接通过类名来调用,虽然static成员也可以使用对象调用,但是从逻辑上建议使用类名调用
static方法中不能直接访问非static成员,非static方法中可以直接访问static成员
static方法由于不和任何对象绑定,因此不能访问this

第7节:接口

extends关键字后面只能跟上一个名字而不是一个列表吗?
接口中能存在什么样的成员?
接口是否能够继承别的接口?
JDK8中如何声明默认方法?默认方法的价值在什么地方?

在描述类与类的继承关系时extends后面只能跟一个名字,在描述接口与接口之间的继承关系时,extends后面可以跟一个列表
使用implements关键字来让类实现一个或多个接口
接口中只能存在公开的静态常量和公开的抽象方法
接口可以继承一个或多个接口
默认方法是库/框架设计者的后悔药。对于以前的遗留代码,大家都不知道有这个新方法,既不会调用,也不会去实现,如同不存在;编写新代码的程序员可以将它视为保底的方法体。类型层次中任何符合override规则的方法,优先于默认方法,因为遗留代码可能正好有同样的方法存在

第8节:枚举

枚举的定义及作用是什么?
声明枚举的一般语法是什么?

枚举给出了将一个任意项同另一个项相比较的能力,并且可以在一个已定义项列表中进行迭代。枚举(在Jave中简称为Enum)是一个特定类型的类。所有枚举都是Java中的新类java.lang.Enum的隐式子类。此类不能手工进行子类定义
枚举使用关键字enum进行定义
枚举可以用在switch case语句中

第9节:关联与依赖

类与类之间常见的关系有什么?分别简要描述

类与类之间的横向关系较为微妙,大体上可以分为四种:依赖 、关联、聚合、组合。
依赖体现了use a关系,通常使用方法的参数描述
关联体现了has a关系,通常使用类的成员属性描述
几种关系的强弱如下:依赖 < 关联 < 聚合 < 组合

第10节:内部类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值