基础二-面向对象

面向对象的特征: • 封装(encapsulation) • 继承(inheritance) • 多态(polymorphism)

  • 成员变量: • 成员变量定义在类中,在整个类中都可以被访问。 • 成员变量随着对象的建立而建立,存在于对象所在的堆内 存中。 • 成员变量有默认初始化值
  • 局部变量: • 局部变量只定义在局部范围内,如:函数内,语句内等。 • 局部变量存在于栈内存中。 • 作用的范围结束,变量空间会自动释放。 • 局部变量没有默认初始化值。

  • 封装:是指隐藏对象的属性和实现细节,仅对外提供 公共访问方式:好处: • 将变化隔离。 • 便于使用。 • 提高重用性。 • 提高安全性。封装原则: • 将不需要对外提供的内容都隐藏起来。 • 把属性都隐藏,提供公共方法对其访问。
  • 继承:多个类中存在相同属性和行为时,将这些内容抽取到
    单独一个类中,那么多个类无需再定义这些属性和行
    为,只要继承单独的那个类即可。好处:继承的出现提高了代码的复用性。继承的出现让类与类之间产生了关系,提供了多态的前提
  • 构造函数:特点:
    1.  函数名与类名相同
    2.  不用定义返回值类型
    3.  不可以写return语句
    作用:
    给对象进行初始化。
    注意:
    1.  默认构造函数的特点。
    2.  多个构造函数是以重载的形式存在的。
  • this:特点:this代表其所在函数所属对象的引用。
    换言之:this代本类对象的引用。
    什么时候使用this关键字呢?
    当在函数内需要用到调用该函数的对象时,就用this。
  • static:被修饰后的成员具备以下特点:
    随着类的加载而加载
    优先于对象存在
    被所有对象所共享
    可以直接被类名调用
    使用注意:静态方法只能访问静态成员、静态方法中不可以写this,super关键字、主函数是静态的
  • override:
    子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。
    父类中的私有方法不可以被覆盖。
    在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。
    覆盖注意事项:
    •  覆盖时,子类方法权限一定要大于等于父类方法权限
    •  静态只能覆盖静态。
    覆盖的应用:
    •  当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
  •  子类的实例化过程:子类中所有的构造函数默认都会访问父类中空参数的构造函数,因为每一个构造函数的第一行都有一条默认的语句super();子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。
    当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。
  • final:final可以修饰类,方法,变量。
    final修饰的类不可以被继承。
    final修饰的方法不可以被覆盖。
    final修饰的变量是一个常量。只能被赋值一次。
    内部类只能访问被final修饰的局部变量。
  • 抽象类:包含抽象方法的类就是抽象类。抽象类和抽象方法必须用abstract关键字来修饰。
    抽象方法只有方法声明,没有方法体,定义在抽象类中。
    •  格式:修饰符 abstract 返回值类型
    函数名(参数列表) ;
    抽象类不可以被实例化,也就是不可以用new创建对象。原因如下:
    •  抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。
    •  而且抽象类即使创建了对象,调用抽象方法也没有意义。
    抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。虽然抽象类不能被实例化,但可以有构造函数。由于抽象类的构造函数在实例化派生类之前发生,所以,可以在这个阶段初始化抽象类字段或执行其它与子类相关的代码。private abstract void run(){} //不可以。abstract方法要给子类重写,它俩是矛盾的。private只能给本类访问。
    static abstract void run(){} //不可以。static可以被 类名.run() 调用,而类名.run()调用抽象方法是没有意义的。
    final  abstract void run(){} //不可以。final修饰方法不让子类重写,而abstract修饰的方法就是为了让子类重写。抽象类可以没有抽象方法,依然不能被实例
  • 接口:接口中的成员修饰符是固定的。接口与接口之间可以有继承关系
    • 成员常量:public static final
    • 成员函数:public abstract
  • 多态:父类或者接口的引用指向或者接收自己的子类对象。
    作用:
    多态的存在提高了程序的扩展性和后期可维护性
    前提:
    •  需要存在继承或者实现关系
    •  要有覆盖操作
  • 内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
    访问特点:
    •  内部类可以直接访问外部类中的成员,包括私有成员。
    •  而外部类要访问内部类中的成员必须要建立内部类的对象。

内部类定义在成员位置上

•  可以被private static成员修饰符修饰。

•  被static修饰的内部类只能访问外部类中的静态成员。

内部类定义在局部位置上

•  也可以直接访问外部类中的成员。

•  同时可以访问所在局部中的局部变量,但必须是被final修饰的。

  • 访问权限:
    被访问的包中的类权限必须是public的。
    类中的成员权限:public或者protected
    protected是为其他包中的子类提供的一种权限



猜你喜欢

转载自blog.csdn.net/qq_24872769/article/details/81050426