面向对象③
访问权限修饰符用来修饰类中的成员,控制是否可以被访问
从大到小排序:
1)public :公共权限 修饰类(包含内部类)、属性、方法。可以在任意类中访问
2)protected:受保护的权限 修饰属性、方法,内部类。可以在同包类访问,如果不是同包类,必须是该类的子类才可以访问。
3)default:同包权限 修饰类、属性、方法。只能在同包的类访问
4)private:私有权限 修饰属性、方法。 只能在本类中访问
默认权限,只能在本包中的类使用
面向对象语言三大特征
封装
封装含义:
1. 包装,例如我们将一些常用的功能进行抽取,定义成一个方法
2. 面向对象特征中的封装:隐藏(使用访问权限修饰符进行隐藏),对类中的成员对外是否可见进行控制
使用权限修饰符控制成员
封装案例1:将类中属性私有化
封装案例2:将某些方法私有化
Java设计模式(模板,固定套路)
解决一类问题的固定方式.
单例模式:单个实例,在系统中,想让某个类只能创建一个对象
成员变量和局部变量:
在类的位置不同:
成员变量:在类中:在类中定义
局部变量:在方法中定义或者方法的参数
权限修饰不同:
成员变量: 可以使用权限修饰符.局部变量:不可以使用权限修饰符
初始化不同:
成员变量: 非静态–创建对象后,由构造方法初始化
静态–类加载时初始化
局部变量:没有默认初始化值,必须定义,赋值。
生命周期不同:
成员变量: 非静态----随着对象的创建而存在,随着对象的销毁而消失
静态----类加载时存在,类被卸载时销毁.
局部变量: 随着方法的调用而存在,随着方法的调用完毕而消失
继承
子继承父 儿子就可以拥有父亲的功能
面向对象中也引入了继承的思想,
继承优点:
继承的出现减少了代码冗余,提高了代码的复用性。
继承的出现,更有利于功能的扩展。
继承的出现让类与类之间产生了is-a的关系,为多态的使用提供了前提。
什么时候用继承
符合is-a关系的设计,可以使用继承
例如:
猫是动物
狗是动物
继承的语法
通过 extends关键字,可以声明一个类B继承另外一个类A,定义格式如下:
[修饰符] class 类A {
… }
[修饰符] class 类B extends 类A {
… }
类B,称为子类/派生类
类A,称为父类/基类
继承性的细节
● 子类会继承父类所有的实例变量和实例方法
● 子类不能直接访问父类中私有的(private)的成员变量和方法
● 在Java 中,继承的关键字用的是“extends”,表示子类是对父类的扩展
● Java支持多层继承(继承体系)
● 一个父类可以同时拥有多个子类
● Java只支持单继承,不支持多重继承
方法的重写(override)
当父类的方法功能实现(父类方法中为完成功能所写的代码)不能满足子类需求时,可以对方法进行重写(override)覆盖.
子类可以对从父类中继承来的方法进行改造,我在程序执行时,子类的方法
将覆盖父类的方法。我们称为方法的重写也称为方法的覆盖。
注意:构造方法,静态方法不能重写,成员变量不存在重写
重写的语法规则:
方法名相同,参数相同,返回值类型一致,访问权限不能小于父级权限,子类重写方法结构应与父类方法结构一致
@Override注解
标记(标签)对方法进行标记,表示此方法是从父类中重写来的
super关键字:
在子类中使用super关键字,访问父类中定义的那部分成员.super.成员变量
super.成员方法(常用)当子类中重写了父类方法时,
为了区分调用的是父类中还是子类中重写的方法,使用super调用父类中的.super()表示调用父类中构造方法
继承中的构造方法的调用:
总是在子类的构造方法中,会去使用super()调用父类的构造方法.为了确保对父类成员进行初始化.