第四章 类和对象

来源:互联网 发布:rt809f编程器软件 编辑:程序博客网 时间:2024/05/19 14:38

5.1 概念

面向过程的思想和面向对象的思想

  1. 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应 该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。
    面向对象有一个非常重要的设计思维:思考的时候,首先眼睛里看到的是一个一个的对象,合适的方法应该出现在合适的类里面

对象:

对象就是实际生活中的事物,可以说接触到的一切都收对象。对象的三个特征:
1. 对象的行为:这个对象能做什么,即完成什么样的功能
2. 对象的标识符:如颜色、大小、样式等等
3. 对象的状态:当操纵对象的方法时,对象所保持的一种特定的状态。

类:

用于描述同一类的对象的一个抽象的概念,类中定义了这一类对象所具有的公有特征和行为。
类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

案例——瓶子

瓶子的定义:具有某些类特征的东西就是瓶子,比分说什么样的形状,比方说有个口,能倒水,能装水,一般有个盖等等。给瓶子下定义的过程,其实就是把瓶子里的某些东西抽象出来了 ,所以瓶子在这里是叫做一类事物的一个抽象,在你脑子里有瓶子的概念,可瓶子的概念在你脑子里到底是什么呢?瓶子的概念在你脑子里叫做一类事物的一个抽象。怎么抽象的呢?你往往抽象的是这两个方面:第一个方面我们叫它静态的属性,瓶子应该具有
哪些特征,比分说瓶子应有个口,这是它的具有的一个静态属性,瓶子一般有一个盖,这也是它的具有一个静态属性,除此之外,你还可能给它总结动态的属性,什么动态的属性呢?比放说瓶子能倒水,这是它的动态属性。瓶子这个概念在你脑子里如果你细细的思维的话,其实你给它做了两方面的总结,一方面是静态的,一方面是动态的。反映到JAVA的类上,一个就是成员变量(静态属性),一个就是方法(动态属性)方法是可以执行的,可以动的。成员变量是某一个类的静态属性。所以你脑子里瓶子的概念实际上是一类事物的一个抽象,这种东西我们叫它类,椅子是类,桌子是类,学生是类。什么是对象呢?这一类事物的具体的某个实例就叫做对象。所以一类事物的具体的某一个东西,符合这类事物具体的特征的某个东西就叫做对象。瓶子是一个类,某个瓶子就是瓶子这个类里面的一个对象。

5.2 对象中的成员

  1. 成员方法:方法就是能够让这个对象做什么或者表现出什么状态的函数,即函数。
  2. 成员变量:对象所拥有的,并且代表对象的属性值。

5.3 对象中的访问控制符

什么访问控制符?就是控制访问权限的关键字
1. 出现在类之前
- public
- default
2. 出现在成员和方法之前
- private
只能在类的内部被访问
- default
同一个包中的类才能访问
- protected
同一个包中的类可以访问、其他包中子类可以访问
- public
所有的类都可以访问

5.4 重载

同一个类中,方法名相同、参数类型不同
、参数个数不同,这种方法被称为重载,与返回值无关,
如下类中的test方法。

public class Person{void test(){}void test(int a){}int  test(float a){}}

5.4 继承

继承,和现实中继承类似,就是在已经存在的类的基础
上进行扩展,从而产生新的类。已经存在称为父类、基类或超类,而新产生的类称为派生类或子类。继承什么呢?即继承父类的属性和方法,子类可以创建自己的特性。

5.4.1 如何实现继承

在java语言中,通过关键字extends来实现。

class Person{    int age;    int height;    void sleep(){    }}class Student extend Person{    //通过继承Person类,Student就有了age、height    //属性和sleep函数    String class;//特有属性班级}

5.4.2 继承中覆盖现象(重写)

子类中存在父类相同的方法,称为覆盖(重写)。

注意:
1. 子类的权限访问控制符只能等于或大于父类,
2. 静态类方法不能被重写
3. 静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化

5.5 构造器

前面说过,类是一类事物的模板,模板是用来构造对象的。那模板是通过什么来构造对象的呢?构造器,构造器和类的名称相同、没有返回值。系统默认的构造器不带参数,如何需要带参数,需要自己写,并且要把不带参数的构造器一起写出来。

public class Color{    Color(){    }    Color(String red){    }}

5.5.1 继承中构造器初始化

在创建子类对象时,先执行父类的构造器,再执行子类的构造器,完成对象的创建。

5.5.2 super、this关键字

在Java中
super代表父类;super(),代表父类的构造器,可以传参来调用不同构造器;this代表引用对象本身;this() 用来代替对象的构s造器;

class Person{    int a;    Person(){}    Person(int a){        this.a =a;    }}class Woman extends Person{    int b;    Woman(){        supper();//调用父类的无参构造器    }    Woman(int a,int b){        super(a);//调用父类的有参构造器        this.b =b;    }}public class Junit{    public static void main(String [] args){        Woman woman = new Woman(3,4);    }}//在创建对象的过程中,先调用父类构造带参数构造器//,将3传递给a。再调用子类的构造器初始化。

5.6 类和类之间的关系

类和类之间的关系主要有三种:
1. 依赖(user-a)
2. 聚合(has-a)
3. 继承(is a)

5.7 对象的克隆

有两种方式:
1. 实现Cloneable接口并重写Object类中的clone()方法;
2. 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,

原创粉丝点击