面向对象的概念
特点:
1、将复杂的事情简单化
2、从过程中的执行者变成了指挥者
3、是一种思想
理解面向对象:
面向对象是相对于面向过程而言的
他们都是一种思想
面向过程:功能行为
面向对象:是将功能封装成对象,他是基于面向过程的
封装
- 有些数据是对象特有的数据, 是不可以被静态(static)修饰的。因为那样的话,特有的数据会变成对象的共有数据,这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。
- 静态方法只能访问静态成员,不可以访问非静态成员,因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。
- 静态方法中不能使用this、super关键字。因为this代表对象,而静态在时,有时候没有对象,所以this无法使用。
主函数是静态的。
成员分两种:
成员变量。(数据共享时静态化)
该成员变量的数据是否是所有对象都一样:
如果是,那么该变量需要被静态修饰,因为是共享的数据。如果不是,那么就说这是对象特有的数据,需要存储到对象中。成员函数。(方法中没有调用特有数据时就定义成静态)
如果判断成员函数是是否需要被静态修饰呢?
只要参考,该函数内是否访问了对象中的特有数据:
如果没有访问特有数据,那方法不能被静态修饰。
如果没有访问过特有数据,那么这个方法需要被静态修饰。
什么时候定义静态成员呢?或者说:定义成员时,到底需不需要被静态修饰呢?
成员变量和静态变量的区别
- 成员变量所属于对象,所以也称为实例变量。
静态变量所属于类,所以也称为类变量。 - 成员变量存在于对内存中。
静态变量存在于方法区中。 - 成员变量随着对象创建而存在。随着对象被收回而消失。
静态变量随着类的加载而存在。随着类的消失而消失。 - 成员变量只能被对象所调用。
静态变量可以被对象调用,也可以被类名调用。
所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据
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、提高系统的扩展性。