封装(Encapsulation)
1.概念:对象的边界内部起到保护作用 实现数据隐藏
2.实现封装
1) 属性私有 : 提供公开的getxxx和setxxx方法 用来访问
语法:
get用于获取属性:
public 类型 get属性名(){
return 属性;//返回属性值
}
set用于设置属性:
public void set属性名(类型 名称){
this.属性名 = 名称;
}
2)方法私有 : 声明公开 实现隐藏
实现改变时对架构影响最小
注意:
1)方法私有后,只能在本类中使用,不能继承。
2)get/set方法根据属性的不同,可选提供
一个属性如果只有set方法,那么该属性只能修改,不能访问
一个属性如果只有get方法,那么该属性只能访问,不能修改
一个属性如果没有get/set,外部无法访问与修改
继承(Inheritance)
1.概念 : 所有子类能够访问父类属性和方法即是子类从父类中得到的属性和方法
类与类 is a 关系的一种体现,提高代码的重用性
2.访问权限修饰符
本类 | 同包 | 非同包子类 | 无要求 | |
---|---|---|---|---|
private | √ | |||
(default) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
3.构造方法不能被继承
4.方法的覆盖
a.子类用特殊的方法实现替换掉父类继承给它的一般方法实现
b.返回值类型 方法名 参数表相同,修饰符只能相同或者更宽,不能抛出比父类更广泛的异常
5.创建对象步骤:
a.分配空间 默认值
b.递归的构造父类对象(2-4步)
c.初始化属性
d.调用构造方法
6.super关键字
a.super.引用:父类对象
b.super()用在构造方法中,指定调用父类哪一个构造方法
必须用在构造方法第一个语句
c.super.方法名 指定调用父类被覆盖的方法
如果一个构造方法的第一个语句不是this(),也不是super(),系统会默认添加super();常常用来把构造参数传给父类 7.单继承
任何一个类只能有一个直接父类
多态(Polymorphism)
1.概念:
父类引用可以装载不同的子类对象 从而产生的状态不同(形态不同)
多态的体现
Animal a = new Dog(); Animal a1 = new Cat();
2.多态语法:
父类 引用 = new 子类对象();父类引用指向子类对象
父类类型 = 子类类型
主观类型 = 实际类型
3.特点:
1)对象类型始终不变
2)编译时,只能调用引用类型中声明的方法
3)运行时,如果子类覆盖了父类中的方法,则执行覆盖后的方法
4.对象类型转换
1)子类对象 赋值给 父类引用
Animal a = new Dog(); 多态(父类引用指向子类对象)
2)父类引用 赋值给子类 引用
Animal a = new Dog();a. Dog d = (Dog)a;//当需要调用Dog类中独有的方法时 当父类引用赋值给子类引用时,必须使用 强制类型转换(保证编译通过) 运行时可能出现类型转换异常:java.lang.ClassCastException MyClass mc = (MyClass)a;//编译器认为a引用中保存的对象不可能是MyClass或MyClass的子类
5.作用
1)屏蔽各个子类之间的差异
2)利于拓展,降低程序间耦合度
6.instanceof
语法:
引用 instanceof 类型; 判断引用中所存储的对象是否与该类型兼容 表达式的结果为 boolean 类型
over( ̄▽ ̄)~*