封装
封装就是指把客观上的事务封装成抽象的类Class,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏,即类定义、方法、属性定义。封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
名称 | 作用对象 | 适用范围-包内 | 适用范围-包外 | 适用范围-包外子类 |
public | 类,类成员,方法 | √ | √ | √ |
protected | 类,类成员,方法 | √ | × | √ |
private | 类,类成员,方法 | × | × | × |
friendly(默认修饰符) | 类,类成员,方法 | √ | × | × |
继承
继承是指一种能力:它可以把使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“父类”或“超类”。继承过程,就是类从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现有两种方式:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力,接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力。
“继承”(Inheritance):class B extends A ,逻辑上是B是A的一种。
“组合”(Composition):B类中类成员为A,逻辑上是A是B的一部分。
多态
多态是指一个类实例的相同方法在不同场景有不同的表现形式。多态机制使得具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但是同一个公共类,这些操作可以通过相同的方式予以调用。
Animal a = new Cat(); // 向上转型
a.yell(); // 调用的是 Cat 的 yell
Cat c = (Cat)a; // 向下转型
c.hunter(); // 调用的是 Cat 的 hunter
public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫抓老鼠
Cat c = (Cat)a;
c.hunter();
} else if (a instanceof Dog) { // 狗抓贼
Dog c = (Dog)a;
c.hunter();
}
}