Java — 面向对象的三大特性(封装、继承、多态)

面向对象的概念

特点:

    1、将复杂的事情简单化
    2、从过程中的执行者变成了指挥者
    3、是一种思想

理解面向对象:

    面向对象是相对于面向过程而言的
    他们都是一种思想

    面向过程:功能行为
    面向对象:是将功能封装成对象,他是基于面向过程的

这里写图片描述

封装

  1. 有些数据是对象特有的数据, 是不可以被静态(static)修饰的。因为那样的话,特有的数据会变成对象的共有数据,这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。
  2. 静态方法只能访问静态成员,不可以访问非静态成员,因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。
  3. 静态方法中不能使用this、super关键字。因为this代表对象,而静态在时,有时候没有对象,所以this无法使用。
  4. 主函数是静态的。

    • 成员分两种:

      • 成员变量。(数据共享时静态化)
        该成员变量的数据是否是所有对象都一样:
        如果是,那么该变量需要被静态修饰,因为是共享的数据。如果不是,那么就说这是对象特有的数据,需要存储到对象中。

      • 成员函数。(方法中没有调用特有数据时就定义成静态)
        如果判断成员函数是是否需要被静态修饰呢?
        只要参考,该函数内是否访问了对象中的特有数据:
        如果没有访问特有数据,那方法不能被静态修饰。
        如果没有访问过特有数据,那么这个方法需要被静态修饰。

什么时候定义静态成员呢?或者说:定义成员时,到底需不需要被静态修饰呢?

成员变量和静态变量的区别

  1. 成员变量所属于对象,所以也称为实例变量。
    静态变量所属于类,所以也称为类变量。
  2. 成员变量存在于对内存中。
    静态变量存在于方法区中。
  3. 成员变量随着对象创建而存在。随着对象被收回而消失。
    静态变量随着类的加载而存在。随着类的消失而消失。
  4. 成员变量只能被对象所调用。
    静态变量可以被对象调用,也可以被类名调用。
    所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据

Person p = new Person();
创建一个对象都在对内存中做了些什么事?
静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块-构造代码块-构造函数;

继承

继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。

如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类

继承中最常使用的两个关键字是extends和implements。

这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。

通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。

所有Java的类均是由java.lang.Object类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。

通过过extends关键字可以申明一个类是继承另外一个类而来

通过使用关键字extends,子类可以继承父类的除private属性外所有的属性。使用instanceof 操作符。

extends关键字

在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

implements关键字

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

super 与 this 关键字

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。

final关键字

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
声明类:
final class 类名 {//类体}
声明方法:
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final

构造器

子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

多态

概念

简单来说就是同一个行为具有多个不同的表现形式或形态的能力。

多态的分类

多态一半分为两种:重写式多态和重载式多态。

  • 重载式多态,也叫编译时多态。也就是说这种多态在编译时已经确定好了。

  • 重写式多态,也叫运行时多态是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相对应的方法。也就是说,只有运行起来你才知道调用的是哪个子类的方法。

多态的条件
  • 继承-在多态中必须存在有继承关系的子类和父类。
  • 重写-子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
  • 向上转型-在多态中需要将子类引用类的引用赋给父类对象,只有这样该引用才能够具备调用父类的方法和子类的方法。—– 好处:1、减少重复代码,使代码变得简洁。2、提高系统的扩展性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值