java面向对象

xiaoxiao2021-02-28  99

1、面向对象

  一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象具备某种功能的实体,称为对象.面向对象最小的程序单元是:.

  面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性

  在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。

三大特征:

1:封装(Encapsulation);

2:继承(Inheritance);

3:多态(Polymorphism);

封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露该对象的功能。

继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。

多态是可以直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。

注意:千万不要误解为面向对象一定就优于面向过程的设计

2、对象和类的关系

  你在街上看到一个美女,就可以把这个美女看成一个对象,那么该对象有两方面的定义状态和行为

美女有状态,如身高,年龄,皮肤颜色等;美女还有行为,如走路,说话,抛媚眼等。

不难发现,对象可以定义成包含状态和行为的一个实体,对象(object)也称为实例(instance)。

什么是实体:存在于现实世界中并且可以与其他物体区分开来的物体,实际存在的个体

-----------------------------------------------------------------------------------------------------

对象:

对象是人们要进行研究的任何事物,一切事物都可以认为是对象。

对象具有状态和行为:

  对象具有状态,比如姓名,年龄,性别等。

  对象还有操作,比如吃饭,睡觉,写代码等。

此时,通过对多个同类型的对象分析,我们可以把对象抽象成类

-----------------------------------------------------------------------------------------------------

类:

具有相同特性(状态)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型

类具有特性,对象的状态,用成员变量来描述,封装数据

类具有功能,对象的行为,用方法来描述。

-----------------------------------------------------------------------------------------------------

什么是类:类是对象的类型/模板。创建一个对象,就是使用一个类作为构建该对象的基础。

实际上,解释类和对象的关系确实存在着“先有蛋还是先有鸡”的问题,描述类少不了对象,相反,描述对象也少不了类。

不过在面向对象编程里,我们肯定是先有类的。如果没有类,对象就没法实例化

-----------------------------------------------------------------------------------------------------

对象是类的实例,类是对象的模板

比如下面一个例子:分析出对象和类,以及对象具备的状态和行为。 

 

找多个对象共同的状态和行为:

状态:

            姓名:

            年龄:

            身高:

            体重:

行为:

            唱歌

            跳舞

---------------------------------------

把对象的状态使用成员变量表示,

把对象的行为使用方法表示.

class Person { String name; int age; int height; int weight; void sing() {} void dance() {} }

3、类的定义:

---------------------------------------------------------------

[修饰符] class  类名

{

       0~N个成员变量(字段/Field),不要叫属性(JavaBean中特殊的一种成员).

       0~N个方法

}

public class Person { //成员变量:这些就是Person类对应的对象的状态(private是修饰符) private String name; private int age; //成员方法:这些就是Person类对应的对象的行为 void shopping(){ System.out.println("这是购物的方法"); } void sing(){ System.out.println("这是唱歌的方法"); } void dance(){ System.out.println("这是跳舞的方法"); } }

------------------------------

定义类的注意:

    1):如果类使用了public修饰符,必须保证当前文件名称和当前类名相同.

    2):类名使用名称表示,类表示某一类事物,首字母大写,如果是多个单词组成使用驼峰表示法.

         :EmployeeAdvanceSetting.

    3):在面向对象的过程中,各位定义类的时候,专门为描述对象提供一个类,该类不需要main方法.

       我们专门再定义一个测试类/演示类来运行程序.

4、对象的创建和操作

1):根据类来创建对象的语法:

      类名  变量 = new 类名();

      比如:Person person =  new Person();

2):给字段设置值:

    对象变量.字段名=该类型的值;

      比如:Person person =  new Person();

person.name  = "张三";

person.setName("张三");

3):获取字段的值:

     该字段类型 变量=对象变量.字段值;

       比如:Person person =  new Person();

String   name   =  person.name;

String   name   =  person.getName();

4):通过对象调用方法.

     对象变量.方法(实参或者无参数);

     比如:Person person =  new Person();

person.doWork();

5、对象的打印比较

对象的打印和比较对象以及匿名对象

-------------------------------------------------------------

1):对象的打印操作:

     打印对象的时候,打印出来的效果,:Servant@3294e4f4.

     类的名称@十六进制的hashCode.

     其实,我们打印对象,往往关系的是该对象中的数据是多少,这就需要Obejct类toString方法.

public class Person { //成员变量:这些就是Person类对应的对象的状态(private是修饰符) private int id; private String personName; private int age; //成员方法:这些就是Person类对应的对象的行为 void shopping(){ System.out.println("这是购物的方法"); } void sing(){ System.out.println("这是唱歌的方法"); } void dance(){ System.out.println("这是跳舞的方法"); } public static void main(String[] args) { Person person = new Person(); System.out.println(person); //结果是:Person@15db9742 } }

2):对象比较操作:

     ==:对于基本数据类型来说,比较的是值.

              对于引用数据类型来说,比较的是在内存中的地址值.

               每次使用new关键字,都表示在堆值新开辟一块内存空间,不同的内存空间,地址值不同.

     需求:如果对象拥有完全相同的数据,我就想让他们相等.这就需要Object类equals方法.

public class Person { //成员变量:这些就是Person类对应的对象的状态(private是修饰符) private int id; private String personName; private int age; //成员方法:这些就是Person类对应的对象的行为 void shopping(){ System.out.println("这是购物的方法"); } void sing(){ System.out.println("这是唱歌的方法"); } void dance(){ System.out.println("这是跳舞的方法"); } public static void main(String[] args) { Person person1 = new Person(); Person person2 = new Person(); System.out.println(person1==person2); //结果是:false ,两个对象不相等,比较的是地址值 } }

3):对象的生命周期:

     对象什么时候出生:每次使用new关键字的时候,就会在内存开辟新的空间,此时对象开始存在.

     对象的结束:当堆中的对象,没有被任何变量所引用,此时该对象就成了垃圾,就等着垃圾回收器(GC)来回收该垃圾,当被回收的时候,对象被销毁了,回收垃圾的目的,释放更多的内存空间.

4):匿名对象:没有名称的对象,创建对象之后没有赋给某一个变量.

      new Person();//匿名对象,匿名对象只是在堆中开辟一块新的内存空间,但是没有把该空间地址赋给任何变量.

      因为没有名称,匿名对象仅仅只能使用一次,一般的,把匿名对象作为方法的实参传递.

public class Person { //成员变量:这些就是Person类对应的对象的状态(private是修饰符) private int id; private String personName; private int age; //成员方法:这些就是Person类对应的对象的行为 void shopping(){ System.out.println("这是购物的方法"); } void sing(){ System.out.println("这是唱歌的方法"); } void dance(){ System.out.println("这是跳舞的方法"); } public static void main(String[] args) { new Person().dance();//匿名对象,没有名字,只能使用一次 } }

     

转载请注明原文地址: https://www.6miu.com/read-32002.html

最新回复(0)