day07回顾
面向对象的特性之一:封装
封装:隐藏对象的属性和实现细节仅对外提供对外的公共访问方式
private关键字:私有的
修饰成员变量和成员方法(还可修饰内部类),只能在本类访问,不能在其他类直接访问
提供公共的访问方式---getters/setters
因为存在局部隐藏成员问题,引出this关键字:
this:代表所属类的对象的引用,
谁调用方法this就代表谁
static关键字:
修饰成员变量成员方法
特点:
被类的所有对象所共享
随着累的加载而加载,优先于对象而存在,静态的方法和属性可以直接使用类名调用
注意事项:
静态方法只能静态的成员
API文档的使用
Random此类的实例用于生成伪随机数流
伪:不是绝对,相对随机,在近乎无限的测试中可以找出规律,有限情况可视为随机
day08
课程目标
理解继承的概念
掌握继承的好处和特点
理解定义继承的原则
掌握继承关系中子父类成员特点(重点)
掌握this与super的联系与区别
理解继承中代码块执行顺序问题
掌握final关键字
random类
构造:Random() -- 无参构造
功能;
nextInt() -- 返回Int范围内的一个随机Int值
继承(面向对象的三大特性之二)
概述
编码过程发现代码重复率其实很高,有效代码并不多
假如我们把相同的内容提取出来,并让它和其他的类产生一个关系,然后就都具备这样的功能了
针对这种情况,java就提供了一种技术:继承
提高代码复用性
多个类中存在相同属性和行为时,将这些内容抽取出来,放到一个类里面,该体系其他的类只要继承
这个类,那么就应该可以拥有这些共性内容了
Person:父类基类超类
Student:子类,派生类
通过extends关键字
格式:
class A extends B
{
//子类具体内容
}
注意:
子类可以访问父类中的非私有的属性和方法
提高代码的复用性是多态的前提 (低耦合--连接)
子类继承了父类,子类就拥有了父类非私有内容 (高内聚--)
子类不能继承父类私有的成员 (扩展性--增加功能)
Object是整个类层次的根类
通过继承可以使用父类中的非私有的内容,要想使用只能调用父类中提供的公共访问方式
好处:
提高了代码的复用性
让类与类之间产生了关系,是多态的前提
java继承特点
java只支持单继承不支持多继承,避免多继承产生的调用不明确
java支持多层继承(多重继承)
单一的子类可以一直向上继承非私有(纵向上):形成了继承体系
什么时候把类的关系定义为继承
由于继承体现了一种关系:is a的关系 Xxx is a Yyy
以后在定义多个类时,多个类之间有is a的关系,就把他们定义为继承
两个类之间体现为is a的关系
如果A is a B
A是子类,B是父类
注意
尽量不要为了获取部分功能而去用继承
根本体现的是两个类的关系
(实际开发中,当确定某个类不会继承自其他类了,同时又迫切需要某个功能时可以使用)
继承关系的子父类特点
类的组成
成员变量
构造方法
成员变量
子父类的成员变量关系:
通过子类访问成员变量时(针对名字相同时):就近原则
首先在局部找,有就用
继续在成员中找,有就用
最后在父类中找,有就用...
各种输出:
子类局部范围;直接输出变量名
子类成员范围:this.变量名(本类对象的引用)
父类成员范围:输出super.变量名
实际开发中
子父类变量和方法尽量不要重名
关键字super
与this的用法相似
this代表本类对象引用
super代表父类内存空间的标识(可以理解为父类对象的引用)通过标识就可以使用该内容
this.变量---当前类的变量
this.变量---父类的变量
应用
构造方法
this()表示本类构造方法
this(参数)根据给定参数去匹配本类的某个构造方法
super()父类构造方法
super(参数)根据给定参数去匹配父类中的某个构造方法
成员方法
this.方法名()--调用本类方法
super.方法名()--调用父类方法
方法重写:(子父类成员方法调用)
概念
子类中出现与父类中一模一样的方法时,会出现方法覆盖(重写)
子类如果有就用,没有就找父类
方法重写和重载的区别
方法重写
子父类中出现方法相同的情况
返回值 方法名 参数(除了权限修饰符)
方法重载
同一类中,方法名相同,参数列表不同
重载只与方法名和参数列表有关
@Override--方法的上面,
注意问题
父类中的私有方法不可以被重写(子类根本看不到父类中的方法)
覆盖时,子类访问权限一定要大于等于父类访问权限
访问权限四个:private<默认(什么也不写)<protected<public
静态方法只能被静态方法覆盖(静态随类的加载,非静态随对象的加载)
这个其实不能算对象的范围
覆盖作用
当子类需要父类功能,而子类又要自己的的特有功能时,使用重写
可以复写父类中的方法,既沿袭了父类的功能,又定义了子类特有的内容。
|
|