目录
多态
前提
形式
测试类
调用成员的特点
优势
劣势
包
注意事项:
final关键字
常量
命名规范:
注意事项:
权限修饰符
分类
代码块
局部代码块
构造代码块
静态代码块
抽象类
抽象类:
定义格式
抽象方法:
定义格式
注意事项
多态
同类型的对象,表现出不同形态
前提
有继承关系
有父类引用指向子类对象
有方法重写
形式
父类类型 对象名称 = 子类对象;
测试类
public class Test {public static void main(String[] args) {//创建3个对象 学生 老师 管理员Student s = new Student();s.setName("张三");s.setAge(18);Teacher t = new Teacher();t.setName("李四");t.setAge(50);Administrator a = new Administrator();a.setName("王五");a.setAge(30);register(s);register(t);register(a);}public static void register(Person p) {p.show();}
// 学生的信息为:张三,18
// 老师的信息为:李四,50
// 管理员的信息为:王五,30
}
调用成员的特点
变量调用:编译看左边,运行也看左边
方法调用:编译看左边,运行看右边
优势
在多态形态下,右边对象可以解耦合,便于扩展和维护。
定义方法时,使用父类做参数,可以接收所有子类,体现多态的扩展性和便利
劣势
不能调用子类的特有功能,使用时需要进行强制类型转换。转换时使用instanceof关键字进行判断
包
包就是文件夹,用来管理不同功能的java类,方便后续的代码维护
包名取名规则:见名知意
注意事项:
使用同一包中的类,不需要导包
使用java.lang包中的类,不需要导包
如果同时使用两个包的同名类,需要用全类名
final关键字
修饰对象 | 作用 |
---|---|
方法 | 表明该方法是最终方法,不能被重写 |
类 | 表明类是最终类,不能被继承 |
变量 | 叫做常量,只能被赋值一次 |
常量
常量一般作为系统的配置信息,方便维护,提高代码可读性。
命名规范:
单个单词:全部大写
多个单词:全部大写,单词之间用下划线隔开
注意事项:
final修饰的变量是基本数据类型,那么变量存储的地址值不能发生变化。
final修饰的变量是引用数据类型,那么变量存储的地址值不能发生变化,对象内部可以改变
权限修饰符
权限修饰符:用来控制一个成员被访问的范围
作用:可以修饰成员变量,成员方法,构造方法,内部类
分类
修饰符 | 同一个类中 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
---|---|---|---|---|
private | √ | |||
空(默认) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
代码块
- 局部代码块
- 构造代码块
- 静态代码块
局部代码块
用于限定变量生命周期,提高内存利用率。
构造代码块
写在成员位置的代码块,优先构造方法执行的。
静态代码块
需要static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次。
抽象类
抽象类:
如果一个类中存在抽象方法,那么该类必须被声明为抽象类
定义格式
public abstract class 类名{}
抽象方法:
将共性的行为抽取到父类之后。由于每个子类执行的内容不一样,所以在父类中不能确定每个子类的方法体
定义格式
public abstract 返回值类型 方法名(参数列表);
注意事项
- 抽象类不能实例化
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 可以有构造方法
- 抽象类的子类需要重写抽象类中的所有抽象方法,或者子类也是抽象类