面向对象三大特性:封装,继承,多态
面向对象(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默认protectedpublic

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();//输出:汪汪
    }
}