一、封装
1. 概念:
将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
2. 优点:
1. 内部数据和方法全部被隐藏隔离起来,外部只能做有限的访问权限,提高了安全性。
2. 提高成勋维护性,开发者只要保证起外部的特征不变就可以自由修改和维护类内部的结构和逻辑。
3. 可以对成员变量进行更精确的控制。
4. 提高了代码的复用性。
3. 具体实现:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
二、继承
1. 概念:
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
2. 优点:
1. 子类拥有父类的所有属性和方法(private除外)
2. 子类对父类代码的复用
3. 语法规则:
class 子类 extends 父类
如:class Dog extends Animal{ ...... }
4. 注意事项:
1. 在Java中,只支持单继承,如果实现多继承的功能可以采用接口以及对内部类的使用。
2. 子类拥有父类非private的属性,方法。(private是父类私有的)
3. 子类可以拥有自己的属性和方法。(如上面例子中,鹰有“食肉”这个自己的属性等)
4. 提高了类之间的关系(子类与父类之间)。对比封装的说明,封装似乎是降低类之间的关系,更加模块化,而继承带来无法避免的小缺点是提高了类之间的关系。
5. super关键字:
1. 在子类中可以用super(),super.方法名,super.变量和对象。
2. super():调用父类构造方法(构造方法在下文有介绍)。
3. super.方法名:直接访问并调用父类中的某个方法。
4. super.变量和对象:直接访问父类中的变量或对象。
三、多态
1. 概念:
多态指对象的多种引用形态,继承是多态的前提
2. 多态的优点
1. 消除类型之间的耦合关系
2. 可替换性(重写)
3. 可扩充性(子类拥有自己的方法)
4. 接口性
5. 灵活性
6. 简化性
3. 多态存在的三个必要条件
1.继承
2.重写
3.多态性
a. 对象向上转型:子类转为父类。
如:父类对象 = new 子类构造方法(子类对象)
b. 对象向下转型:父类转换为子类。
如:子类对象 = (子类)new 父类对象(强制类型转换)
A. 重载和重写
- 重写:
1.重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
2.重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
3.重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
重写的规则
1.参数列表必须完全与被重写方法的相同。
2.返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
4.父类的成员方法只能被它的子类重写。
5.声明为 final 的方法不能被重写。
6.声明为 static 的方法不能被重写,但是能够被再次声明。
7.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
8.子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
9.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
10.构造方法不能被重写。
11.如果不能继承一个方法,则不能重写这个方法。
- 重载:
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。