面向对象三大特性:封装,继承,多态面向对象(Object Oriented,缩写为OO)是现代软件技术的精髓。
OO具有三大特性:封装性、继承性和多态性。想掌握面向对象思想,就必须深入理解其三大特性。
1、封装性(Encapsulation) 所谓封装,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。OO将万物都视为“对象”(Object),任何对象都具有特性和行为。我们将其特性称为“成员变量” (MemberVarible),将其行为称之为“成员函数"(Member Function),被封装的特性只能通过特定的行为去访问。
封装:通过将对象的某些属性声明为Private隐藏起来,只能使用其提供的特定方法去访问。
2、继承(Inheritance)
继承来的东西:
1. 一般的属性和方法被继承。
2. 构造方法不被继承。
3. 私有的方法不被继承。
4. 私有的属性被隐藏,可以通过继承来的公有方法访问。
继承:在已经存在的类(父类)的基础上创建新类(子类)的过程,子类可以添加自己的新方法,也可以用父类的功能。
对于构造方法来说:
构造方法的第一行不是super(..)就是this(..)
如果一个构造方法第一行不是this(..)或super(..),则默认是对父类无参构造的调用super();
不可能所有的构造都是this(..),至少有一个是super(..);
例如一个宠物类
public class Pet /*extends Object*/{// 如果一个类没有指定继承其他父类,则它的父类是Object。 private String name; private int age; public String toString(){//由于Object的toString对我们没有意义,所有我们需要对toString方法进行重写。重写时候注意重写规则。 return "姓名:"+this.name+",年龄:"+this.age; } public Pet() {//构造方法 super();//默认为super();至少有1个super();构造方法第一行不是this(..)或super(..) }
重写:覆盖 覆写。
1. 发生在父子类中。
2. 同名同参同返回。
3. 子类方法的修饰符不能比父类方法的修饰符更封闭。(要么相同,要么更开放)
private—默认—protected—public。
4. 子类方法抛出的异常不能比父类方法抛出的异常更宽泛。
重载:
1. 发生同一类中
2. 同名不同参。参数个数不同、参数顺序不同、参数类型不同均构成重载。
3. 返回值类型没有要求。
重载与重写的区别
1. 如果参数不同:构成了重载。
2. 如果参数相同:构成了重写。
3、多态性(Polymorphism)
多态:一个对象,多种状态。父类引用指向子类的对象。
多态两点基本定理:
1. 发生多态时,只能调用父类的方法,不能调用子类的方法。
2. 发生多态时,如果子类中重写了父类的方法,再调用这个方法,调用的是子类重写之后的方法。
实现多态,有二种方式,覆盖,重载。 覆盖,是指子类重新定义父类的虚函数的做法。 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
如:
//动物publicclassAnimal { //动物都会 publicvoidcry() { System.out.println("(动物叫)"); }} //狗,继承于动物publicclassDogextendsAnimal { //狗有它自己的叫法 @Override publicvoidcry() { System.out.println("汪汪"); }} publicclassTest { publicstaticvoidmain(String[] args) { //Dog dog = new Dog(); //dog.cry(); Animal animal =newDog();//父类型的引用可以指向子类型的对象 animal.cry();//输出:汪汪 }}