一、类(class)和对象

1.什么是类和对象?

    (1)对象:是客观世界真实存在的实体。
    (2)类:是对象的抽象。

2.类的定义

    (1)类的组成:对象的属性(对象有什么)和对象的行为(对象能干什么)
    (2)定义:
public class Student{
    //成员变量(对象属性)
    数据类型 变量名;
    ...
    //成员方法(对象行为)
    方法1;
    ...
    }

3.对象的使用

    (1)创建对象:
类名 对象名 = new 类名();
    (2)使用对象:
对象名.变量名
对象名.方法名();

4.成员变量与局部变量的区别


成员变量 局部变量
位置 类中 方法中或形参
内存位置 堆内存(new出来的都在堆内存里) 栈内存
初始值 有默认的初始值 必须先定义,再赋值才能用
生命周期 随对象的存在而存在,随对象的消失而消失 随方法的调用而存在,调用完毕就消失

二、封装——面向对象的三大特征(封装、继承、多态)之一

1.private关键字

    (1)private是权限修饰符,可以修饰成员变量和成员方法,被修饰的成员只能在本类中被访问。
    (2)可对被private的成员变量进行的操作get/set(一般用public修饰):
        ①getXxx():获取该成员变量的值;
        ②setXxx(参数):给该成员变量赋值(就是那个参数)。

2.this关键字

        在同一个类中的同一个成员方法中,如果成员变量名与局部变量名相同,就要用this来修饰成员变量名,来表示成员变量。(即解决了局部变量隐藏成员变量的问题)。

3.封装

    (1)原则:将对象的某些信息(属性和行为)隐藏在类内部,不允许其他程序直接访问。
    (2)优点:安全性和复用性。

4.构造方法

    (1)构造方法:是一种创建对象的特殊方法,用来完成对象的初始化,分为无参构造方法和有参构造方法。
    (2)格式:
public class 类名{
    public 类名(){
        ...
    }
}
【tips】:无论是否用到,都要手写无参构造方法。

三、继承

1.什么是继承?

    可以使子类(派生类)具有父类(基类、超类)的属性和方法,当然子类还可以有自己的属性和方法。
    父类中有多个子类中相同的属性和方法。

2.定义格式

    在定义子类时:
public class 子类名 extends 父类名{
    ...;
}

3.优缺点

    (1)优点:复用性、维护性(便于修改)
    (2)缺点:当父类发生变化时,子类也会变化,削弱了子类的独立性。

4.什么时候使用继承?

    如果两个类A和B是包含关系(如动物和猫、水果和梨等),可以使用继承;但如果二者是平级关系(如猫和狗、苹果和梨),不能使用继承。

5.super关键字

    在子类中用来使用父类的成员,用法与this相同。

6.继承中构造方法的访问特点   

    子类中所有的构造方法,默认都会先访问父类的无参构造方法。
    这是因为在子类的构造方法中,第一条语句默认都是调用父类无参构造方法 super(); 语句。子类会继承父类的数据,还可能会使用父类的数据,因此子类在使用构造方法进行初始化时,必须先对父类进行初始化(使用构造方法)。

7.方法重写

    在子类中声明一个与父类中一模一样的方法声明(只是声明一样,而方法体不一样),这样子类既有父类的功能,又有自己的内容。
  【tips】:可以用  @Override  注解来检查方法重写声明的正确性。
  【注意】:(1)父类的私有方法不可以被重写。(2)子类重写的方法的访问权限不能低于父类中被重写的方法(public>默认>private)

8.使用继承的注意事项:

(1)不支持多继承(一个子类只能继承一个父类)。
(2)支持多层继承(可以继承父类的父类的成员)。
(3)父类被private的成员变量也能被子类继承,但是不能在子类中使用,想用的话可以用super()。
(4)类中默认给出无参构造方法,但当写了有参构造方法后,就不再默认给出无参构造方法了,必须自己写。
(5)子类继承父类后,不用再写get/set方法了,因为这也属于共性,可以继承父类的;而构造方法要写,因为构造方法是用来创建对象的,对象还没创建,就无法继承父类的构造方法。

四、多态

1.什么是多态?

    多态指的是同一对象在不同时刻表现出来的不同形态。
Cat c = new Cat();
Animal a = new Cat();//Cat类继承Animal类,并有方法重写
/*
对于右边的同一对象,左边是他的不同形态——Cat类和Animal类
*/

2.前提(条件)

(1)有继承或实现关系;
(2)有方法重写;
(3)有父类引用指向子类对象。
Animal a = new Cat();//这就是父类引用指向子类对象

3.成员访问特点

(1)成员变量:编译看左边,执行看左边。
(2)成员方法:编译看左边,执行看右边。(因为有方法重写)

4.优缺点

(1)优点:提高程序的扩展性:定义方法时,使用父类作为参数,在调用该方法时,可直接使用具体的子类参与操作。
(2)缺点:但不能使用子类自己特有的方法。

5.多态中的转型

(1)向上转型(子类→父类):
Animal a = new Cat();
(2)向下转型(父类→子类):
Animal a = new Cat();
Cat c = (Cat) a;//类似强制转换
【tips】:(1)向下转型后就解决了多态的缺点,此时子类就可以使用自己特有的方法了。
                (2)向下转型时,不同子类之间不能“强制转换”,会报错“ClassCastException”(类型转换异常)