封装性
指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
四种类型:
- 公共类型 (public) :
-public可以修饰类,成员变量,构造方法,方法成员;
-被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包;
-是权限最大的一个修饰符。 - 私有类型(private):
-可以修饰成员变量,构造方法,成员方法,不能修饰类(此处指外部类,不考虑内部类)。
-被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。 - 默认类型(default):
-可用于修饰类,成员变量,构造方法,方法,都能够使用默认权限,即不写任何关键字。
-默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。 - 保护类型(protect):
-可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。
-被protected修饰的成员,能在定义它们的类中,同包的类中被调用。
-如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
注意
- 并不是每个修饰符都可以修饰类(指外部类),只有public和default可以;
- 所有修饰符都可以修饰数据成员,方法成员,构造方法;
- 为了代码安全起见,修饰符不要尽量使用权限大的,而是适用即可。比如,数据成员,如果没有特殊需要,尽可能用private。加强封装性;
- 修饰符修饰的是“被访问”的权限。
继承性
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承的特性
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
继承格式
class 父类 {
...
}
class 子类 extends 父类 {
....
}
注意:
- 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super0;
- 如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数;
- 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。
多态性
多态性是指具有许多形态。多态引用就是在不同时间点,可以指向不同对象类型的应用变量。动态绑定的实现就是多态引用在某个时刻引用变量所引用的对象来决定。
体现
父类引用或者接口的引用指向了自己的子类对象。
如:Animal d = new Dog0;
多态的好处
提高了程序的扩展性。
多态的弊端
当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能即访问的局限性)
多态的前提
- 必须要有关系,比如继承、或者实现。
- 通常会有覆盖操作
可以通过一个关键字instanceof
判断对象是否实现了指定的接口或继承了指定的类。
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
多态在子父类中的成员上的体现的特点
子父类成员 | 编译与运行 |
---|---|
成员变量 | 成员变量–编译运行都看=左边 |
成员函数 | 成员方法–编译看=左边,运行看=右边 |
静态函数 | 静态方法–编译运行都看=左边 |
注:因为静态方法,其实不所属于对象,而是所属于该方法所在的类。
另:文章有些部分为网络上的资料