1.封装
封装性在Java当中的体现:(封装就是将一些细节信息隐藏起来,对于外界不可见。)
1. 方法就是一种封装
2. 关键字private也是一种封装
一旦使用了private进行修饰,那么本类当中仍然可以随意访问。但是!超出了本类范围之外就不能再直接访问了。
间接访问private成员变量,就是定义一对儿Getter/Setter方法必须叫setXxx或者是getXxx命名规则。
对于Getter来说,不能有参数,返回值类型和成员变量对应;
对于Setter来说,不能有返回值,参数类型和成员变量对应。
对于基本类型当中的boolean值,Getter方法一定要写成isXxx的形式,而setXxx规则不变。
2.继承
定义父类的格式(普通类的定义)
public class 父类名称{
}
定义子类的格式
public class 子类名称 extends 父类名称{
...
}
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则 向上找。
间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。
继承关系中,父子类构造方法的访问特点:
1. 子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
2. 子类构造可以通过super关键字来调用父类重载构造。
3. super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。
总结:
子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。
3.多态
代码当中体现多态性,其实就是一句话:父类引用指向子类对象。
格式:
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
Fu obj = new Zi(); 左侧父类的引用,指向了右侧子类的对象
使用多态的写法,访问成员变量的两种方式:
1. 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
2. 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。 在多态的代码当中,成员方法的访问规则是: 看new的是谁,就优先用谁,没有则向上找。
向上转型一定是安全的,没有问题的,正确的。但是也有一个弊端:
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。
解决方案:用对象的向下转型【还原】。
向上转型:对象的向上转型,就是:父类引用指向子类对象。不能调用子类的特有方法
向下转型:子类 子类对象=(子类)父类对象 Cat cat = (Cat) animal;注意原本是什么,向下转型就应该变为什么
要想知道一个父类引用的对象,本来是什么子类?
格式:
对象 instanceof 类名称
这将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。