封装
什么是封装:
将隐私的内容隐藏起来,不让外界直接使用。
封装的好处:
提高代码的安全性。
封装的原则:
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
封装的步骤:
- 将隐私的内容私有。
- 提供get/set方法给别人使用。
get:表示获取
set:表示修改
get/set方法的方法名可以随便写,现在只是为了方便,见名知意。
如何将成员变量私有:
- 使用private关键字。
- private表示私有,只有本类可以使用。
- private可以修饰成员变量和成员方法。
private的使用格式
private 数据类型 变量名;
继承(extends)
继承的定义:
在现有类的基础上定义一个新的类。现有类称为父类,新的类称为子类,子类会自动拥有父类的内容。
继承的好处:
- 子类会自动拥有父类的内容,提高代码的复用性。
- 类与类之间产生了关系,是多态的前提。
继承的格式:
class 父类 {
...
}
class 子类 extends 父类 {
...
}
写代码时,继承的注意事项:
- 分析的时候将子类的相同内容提取到父类中。(子类放自己特有的功能)
- 写代码的时候先写父类,再写子类。
子类不能使用的的内容:
- 构造方法子类不会继承。
- 父类的私有内容子类不能使用。(私有的只有本类可以使用)
- 父类的私有成员变量,要提供get/set方法给子类使用。
- 父类的私有成员方法,子类无论如何都不能使用。
当子类使用变量时,若父类也有此变量。
就近原则:自己有用自己的,自己没有用父类的。
- 局部变量 > 本类成员变量 > 父类成员变量
继承的特点:
- java中,类只能单继承,一个类只有一个父类。
- 一个类可以有多个子类。
- 支持多层继承。
- 子类和父类是相对的概念。
- 一个类没有继承父类,其实是继承object类。
继承后标准构造方法的写法:
- 子类的无参构造调用父类的无参构造。
- 子类的有参构造调用父类的有参构造,自己的成员变量自己赋值。
有了继承关系后:
子类所有构造方法都会先调用父类的无参构造。
为什么要走父类的构造方法:
因为父类中可能有成员变量需要通过构造方法来赋值。
关于继承构造方法,this,super的注意事项:
- 在子类构造方法的第一行,默认有一个super()。
- super()只能放在构造方法的第一行。(不能放在别的方法,只能在构造方法)
- this()也只能放在构造方法的第一行。 (但是可以放在别的方法,且在非构造方法中,能处在任意位置)
在构造方法中,super()和this()都只能放在第一行,那构造方法第一行到底放什么:
- 默认是super()。
- 子类的构造方法能够直接或间接调用到父类的构造方法即可。
何谓间接调用到父类的构造方法:
在调用this()时,第一行是this(参数),则在this(参数)方法中,第一行是super(),间接调用父类的构造方法。
方法重写
为什么是方法重写:
子类中的方法和父类的方法重合。
回顾方法重载的定义:
同一个类中,方法名相同,参数列表不同。
什么时候使用方法重写:
子类和父类有相同的功能,但是子类的功能比父类的功能更加强大,就使用方法重写。
方法重写的注意事项:
- 是子类和父类的事情。
- 方法名要相同。
- 参数列表要相同。
- 返回值类型要相同。
- 子类方法的权限要大于等于父类方法的权限。
多态
什么是多态:
父类引用变量指向子类对象。
多态的前提:
- 要有继承关系或者实现关系。
- 要有方法的重写。(意义体现:不重写,无意义)(不重写,能编译通过,但是直接new父类就行了,没必要用多态)
- 父类引用指向子类对象(格式体现)
多态格式:
父类类型 变量名 = new 子类对象;
变量名.方法名();
- 父类类型:指子类对象继承的父类类型,或者实现的父接口类型。
多态的调用:
多态走的是子类的重写方法。
多态的弊端:
调用方法时看左边,左边的类型有什么方法就能调用什么方法。没有的则不能调用。
多态的好处:
参数写父类,可以传入任意子类(参数学接口,可以传入任意实现类),在参数传递的时候形成多态,提高代码的扩展性。
引用类型的转换:
- 向上转型
- 向下转型
向上转型:
- 将子类转成父类。
- 将范围小的赋值给范围大的。
- 多态就是向上转型。
- 父类 变量名 = new 子类();
向下转型:
- 将父类转成子类。
- 将范围大的赋值给范围小的。
- 格式:子类 变量名 = (子类) 父类变量;
- 好处:可以调用子类中的特有功能。
- 注意事项: 变量new的时候是什么类型,就只能转成什么类型。
instanceof
- 作用:判断一个变量是否是某种类型。
- 格式:boolean r = 变量 instanceof 类名;
- 使用场景:在向下转型前,做类型判断。
- 注意事项:无关类不能用instanceof判断。