一、面向对象之封装 (3w学习法→what→why→how)
1.什么是封装?
隐藏对象的属性和实现的细节,仅对外提供公共的方法
2.为什么要使用封装?
①提高代码的复用性
②降低代码的耦合度
③隐藏具体实现的细节,使用存取控制语句,规范用户的输入输出
④提高代码的安全性
3.怎么使用封装?
这里必须提到四种权限修饰符(有小到大):①private②却省(default)③protected④public
代码层面使用:
4.构造器:生成对象附带可以属性赋值
权限修饰符(默认与类的权限修饰符一致) 类名(参数列表){}
如果 父类显示定义了构造器但是没有显示定义无参构造器,继承的子类将会报错
注意点:
1.没有显示定义构造器,系统将会提供一个默认的无参构造器
2.显示定义构造器的话,系统将会不会提供默认的无参构造器
3.允许显示定义多个构造器,各个构造器之间构成重载
5.this关键字
作用:
①调用本类中的属性
、
· 特殊情况:方法或者构造器中的形参名与属性名一致是,this调用的是属性
②调用本类中的方法
③调用本类中的构造器: this(形参列表);
注意点:
①this(参数列表)必须位于第一行并且只能出现一次
②n个构造器最多出现n-1个this(),还有一个super()
6.属性的赋值顺序
①默认值→②显示赋值→③构造器赋值→④对象.set方法/对象.属性赋值
二、面向对象之继承(extends)
1.什么是继承?
在现实生活中,儿子继承爸爸的基因就是所谓的继承,儿子和爸爸长的相似之外又有可以有些不同。在java中子类继承父类的属性和方法就是继承的关系,但是又可以根据需求改写父类的方法以及扩展自己的方法。
2.继承有什么好处? 提高代码的复用性
3.怎么用?使用extends关键字
继承之后子类对象便获得了父类的结构
4.重写:子类继承父类,并对父类中的同名同参方法进行覆盖
注意点:
①重写方法必须与被重写方法必须同名同参
②重写方法的权限修饰不小于被重写方法的权限修饰符
③重写方法的返回值类型:
1.void还是void
2.基本数据类型还是基本数据类型
3.被重写方法的返回值类型是:引用数据类型A,重写方法的返回值类型是:A或者A的 子类
4.重写方法抛出的异常类型不大于被重写方法抛出的类型异常
5.super关键字:调用父类的结构
作用:
①调用父类的属性 ②调用父类的方法
③调用父类的构造器:super(参数列表)
注意点:
①必须放在第一句并且只能出现一次
②this(参数列表) / super(参数列表)只能二选一
③如果没有显示定义this(参数列表) / super(参数列表),默认调用父类的构造器
6.子类对象实例化的过程:
从结果上看:
子类继承父类便获得了父类的结构,创建子类对象时,在堆空间中,存放父类的结构
从过程上看:
创建子类对象时调用子类的构造器,直接或者间接的调用了父类的构造器,直至调用java.lang.Obeject的无参构造器。正是因为如此,子类才能获得父类的结构,调用父
类的结构。
三、面向对象之多态
1.如何理解多态性?一个事务的多种形态
2.什么是多态性?
对象的多态性:父类的引用指向子类的对象
3.怎么使用?
有了对象的多态性之后,编译期间,只能调用父类的方法,运行期间,实际调用的是子类重写父类的方法。
4.使用前提:①继承关系 ②方法的重写
5.多态性只对于方法而言,对于属性没有
6.如何从编译时和运行时看重载和重写?
对于重载而言,方法调用之前,编译器就确定了将要调用的方法,称为"早绑定\静态绑定"
对于重写而言,只有等到方法调用那一刻,解释运行器才会确定调用的方法,称为"晚绑定\动态绑定"
答案:运行时行为