目录
二、权限修饰符:public & private & 缺省(default) & protected 可以用来修饰属性和方法
二、方法的重写 -----(方法的重载) 修饰符 返回值类型 方法名(参数列表) {}
* 面向对象的编程:
* 1、封装
* 2、继承
* 3、多态
*
* 理解一:人开门
* 面向过程:人打开门
* 面向对象:
* 人{
* 打开(门){
* 门.开开();
* }
* }
* 门{
* 开开(){
* }
* }
*
* 理解二:人把大象装进冰箱
* 面向过程:1.打开冰箱2.把大象装进去3.关闭冰箱门
* 面向对象:
* 人{
* 打开(冰箱){冰箱.开开()}
* 操作(大象){大象.进入(冰箱)}
* 关闭(冰箱){冰箱.合上()}
* }
* 大象{
* 进入(冰箱){}
* }
* 冰箱{
* 开开(){}
* 合上(){}
* }
1.封装
一、 面向对象的特征之一:封装与隐藏
- 问题:当创建了类的对象以后,如果直接通过“对象.属性”的方式对相应的对象属性赋值的话,可能会出现不符合实际情况的意外情况,我们考虑不让对象来直接作用属性,而是通过“对象.方法”的形式,来控制对象对属性的访问。实际情况中,对属性的要求可以通 过方法来体现
- 解决方法:(封装的思想)将类的属性私有化,提供公共的方法(setter(){设置} & getter(){获取})即set和get方法来带调用
二、权限修饰符:public & private & 缺省(default) & protected 可以用来修饰属性和方法
- 1)权限从大到小排列:public > protected > 缺省 >private
- 2)修饰类的权限有: public 缺省
* 修饰符 类内部 同一个包 子类 任何地方
* private yes
* (缺省) yes yes
* protected yes yes yes
* public yes yes yes yes
2.继承
一、面向对象的特征二:继承
- 1.为什么要设计继承性?
- 2.通过“class A extends B”类来实现类的继承。
子类:A 父类(基类SuperClass):B
- 3.子类继承父类以后,父类中声明中声明的属性和方法,子类就可以获取到。
1)一定要明确的是:当父类中有私有的属性或者方法时,子类同样可以获取得到,只是
由于封装的设计,使得类不可以直接调用。
2)子类除了通过继承父类的方法、获取父类的结构之外,还可以定义自己的特有的成分。
3)extends(扩展,继承):子类是对父类功能的扩展,子类不是父类的一个子集,而是
子类包含父类的功能,并有自己的独立功能。
- 4.java的继承性只能单继承。不可以继承其它的类,一个子类只能继承一个父类,一个父类只能继承多个子类。
二、方法的重写 -----(方法的重载) 修饰符 返回值类型 方法名(参数列表) {}
- 1、前提:有子类继承父类
- 2.子类继承父类以后,若父类的方法不适用,那么子类可以对父类的方法重写或者覆盖。
- 3.重写的规则
1)重写的子类的“返回值类型 方法名 (参数列表)”与父类的方法一样。
2)子类重写父类的方法时,子类的方法的修饰符类型不小鱼父类的方法的修饰符。
3)若父类的方法抛出异常,那么子类的抛出的异常不能比父类大。
4)子类的方法同为static和非static的。
5)子类不可以重写private方法,因为定义为private方法时相当于子类中只是新定义一个方法,并没有对其进行覆盖。
3.多态
一、面向对象的特征之三:多态性
- 1.多态性指的是什么?
多态性,可以理解为一个事物的多种表现形态
1)方法的重载和重写2)子类对象的多态性
- 2.子类对象的多态性的前提:
1)必须有类的继承
2)要有子类对父类方法的重写
- 3.程序运行时分为编译和运行两种状态
对于编译时:“看左边”,将此引用变量理解为父类的类型
运行时:“看右边”,看真正的对象的实体:子类的对象,那么执行的方法就是子类重写的。
- 4. 子类对象的属性不适用与多态性,属性中不存在覆盖一说!
例如:父类中id = 1001;子类中id = 1002;
调用 父类 对象名(h) = new 子类(); p.id = 1001;(因为子类没有覆盖父类)
//子类对象的多态性:父类引用指向子类对象,即子类对象赋给父类的方法
Person p1 = new Man(); //调用的男人的实体
//虚拟方法的调用:通过父类的引用指向子类的方法实体,当调用方法时,实际执行的是子类重写父类的方法。
p1.eat();
Man m1 = (Man) p1;
m1.Chifan();
Person p2 = new Woman();
p2.eat();
//Woman wo = (Woman)p1; //向下转型:父类到子类
//instanceof:
//格式: 对象a instanceof 类A :判断对象a是否是类A的一个实例,是的话返回true,否则的话返回false
//若a是A类的实例,那么a也一定是A类的父类的实例
if(p2 instanceof Woman) {
Woman w1 = (Woman)p2;
w1.shopping();
}