面向对象
面向过程和面向对象
● 面向过程:
分析出解决问题所需要的步骤,然后把步骤一步一步实现。
面向过程直接关注流程。
● 面向对象:
以分类的方式进行思考和解决问题。
面向对象先对整体关系作出分类,然后根据不同的类深入细节的处理。 面向对象的思想符合人类的认知习惯
Java类
• 类的结构
成员变量:事物属性的描述;
方法:事物的行为;(可以做的事情)
构造方法:用于创建对象;
内部类: 即在类体中声明的类。
块:一段没有名称的代码块
类和对象
类是一类事物的抽象概念,是一个模型. 对象是由这个模型所创造的一个个具体存在的,实实在在存在的实例. 所以创建对象的过程也叫实例化对象.
现实生活中先有对象后有类,而编程时先设计类后创建对象
1.类与对象的概念
- 对象是对现实世界中事物的抽象,是Java程序的基本封装单位,是类的实例;
- 类是对象的抽象,是数据和操作的封装体;
- 属性是事物静态的抽象,在程序中用数据成员加以描述;
- 操作是事物动态特征的抽象,在程序中用成员方法来实现;
2类与对象的区别
1、类是对某一类事物的描述,是抽象的;
而对象是一个实实在在的个体,是类的一个实例。
比如:“人”是一个类,而“教师”则是“人”的一个实例。
2、对象是函数、变量的集合体;
而类是一组函数和变量的集合体,
即类是一组具有相同属性的对象集合体。
3、类的数据值是共享的,一个实例能访问它所属类的类数据值;
而实例数据属于单个对象,除共享了所在类中的数据外,
不同对象还会有不同的数据值。
4、先有类,才有类的实例(对象)。
应用在:当你在创建某个类的实例(对象)之前,这个类必须被定义。
5、实例方法和类方法的区别在于:
实例方法属于单个对象,类方法属于类。
变量
● 成员变量:
成员变量是定义在类中,方法体之外的变量。成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。成员变量在创建对象的时候会从类中复制一份到对象中。成员变量可以被类中方法、构造方法和特定类的语句块访问。成员变量的作用范围为整个类体。
● 局部变量:
在方法、构造方法或者语句块中定义的变量被称为局部变量。局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。局部变量在使用前必须初始化赋值。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
方法
● 成员方法:成员方法是定义在类中。
● 构造方法:用来初始化对象的方法。
• 构造方法名与类名相同,且没有返回值,且不需要使用void修饰。
• 作用:在构造方法中为创建的对象初始化赋值,
• 在创建一个对象的时候,至少要调用一个构造方法。
• 每个类都有构造方法。如果没有显式地为类定义构造方法,Java将会为该类提供一个默认
构造方法,但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效。
• 一个类可以有多个构造方法
方法重载
● 方法的重载是指同一个类中具有相同的名字,但参数不同的多个方法。
● 参数不同(可以有三方面的不同)
● 数量不同
● 类型不同
● 顺序不同
● 调用时,会根据不同的参数表选择对应的方法。
• 注意:方法重载跟方法的返回值类型没有任何关
关键字
this
this关键字代表当前对象
使用this关键字引用成员变量
使用this关键字引用成员方法
static
● static被称为静态,可以用来修饰类的属性,方法,代码块,内部类。
• 随着类的加载而加载
• 优先于对象存在
• 修饰的成员,被所有对象所共享
• 可不创建对象,直接被类调用
代码块
代码块在类中声明,类似一个没有名称的方法体(代码块),代码分实例块和静态块
实例块:每次创建对象时自动调用
{
//任何符合语法的Java代码
}
静态块:类加载时自动调用,仅一次,与是否创建对象无关。
static {
//任何符合语法的Java代码
}
包
访问修饰权限符
访问权限修饰符:用来修饰类,变量,属性,方法,内部类,控制其访问权限(访问权限与包密切相关);
public:公共的;用来修饰:类,成员变量,方法,内部类,在任何类中都能访问;
protected:保护的;用来修饰:成员变量,方法,内部类,特别的(继承父类的子类可以访问);
default:默认的;用来修饰:类,成员变量,方法,内部类;
private:私有的;用来修饰:成员变量,方法,内部类;
在同包的其他类中:public protected default 可以访问;
private:只有在同包同类中才能访问;
不同包不同类只有public可以进行访问;
面向对象特征
封装
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,
而是通过该类提供的方法来实现对隐藏信息的操作和访问
继承
1.继承的概念
1.继承是所Java 语言不可缺少的组成部分。
2.继承是 Java 面对对象编程技术的一块基石,是面对对象的三大特征之一,也是实现软件复用的重要手段,继承可以理解为一个对象从另一个对象获取属性的过程。
3.如果类 A 是类 B 的父类,而类 B 是类 C 的父类,我们也称类 C 是 A 的子类,类 C 是从类 A 继承而来的。在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。
4.继承中最常使用的两个关键字是 extends 和 implements ,这两个关键字的使用决定了一个对象和另一个对象是否是 IS-A (是一个)关系,通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。
5.所有 Java 的类均是由 java.lang.Object 类继承而来的,所以 Object 是所有类的祖先类,而除了 Object 外,所有类必须有一个父类。
6.将子类的共有特征放在父类中
7.实现代码的复用,扩展性好;子类除了继承父类功能之外,还可以拓展自己的功能。
我们通过使用 instanceof 操作符,能够确定 A is B 的关系
多态
1.概念
多态:同一种事物在不同时刻表现不同的状态;
2.存在的必要条件
- 要有继承(包括接口的实现)(前提条件);
- 必须要有重写;
- 父类引用指向子类对象;
3.多态中成员的特点
1.多态成员变量:编译运行看左边
Fu f=new Zi();
System.out.println(f.num);//f是Fu中的值,只能取到父中的值
2.多态成员方法:编译看左边,运行看右边
Fu f1=new Zi();
System.out.println(f1.show());//f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。
4.多态的转型
多态的转型分为向上转型和向下转型两种:
1.向上转型:多态本身就是向上转型过的过程
使用格式:父类类型 变量名=new 子类类型();
Animal b = new Bird();//向上转型,子类自动上升为父类类型;
适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。
优点:父类引用表示子类对象,提升了代码的扩展性;
缺点:父类无法调用子类特有的方法;
2.向下转型(强制转化):一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型
-
通过父类强制转换为子类,从而来调用子类 独有的方法
使用格式:子类类型 变量名=(子类类型) 父类类型的变量;
适用场景:当要使用子类特有功能时。
-
为了向下转型顺利完成, Java 中提供了一个关键字:
instanceof
(来判断某对象是否是某类的实例)
接口
1.概念:
接口:接口(interface)是抽象方法和常量值的定义的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
- 接口和抽象类一样都是用于顶层类,规范特征方法;
- 成员变量默认为静态常量;
2.接口存在的意义
:一个类只能有一个(直接)父类,却可以实现多个接口;