J2SE之面向对象编程

面向对象的设计思想

面向对象的基本思想是:从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。面向对象更加强调运用人类在日常的思维逻辑中经常采用的的思想方法与原则,如抽象、分类、继承、聚合、多态等。

面向对象的思维

首先考虑在这个问题里有那些类和那些对象。然后考虑这些类和这些对象每种类每种对象应该具有那些属性和方法。最后在考虑类和类之间有什么关系。

类和类之间的关系

关联关系

继承关系

J2SE之面向对象编程_第1张图片

聚合

父类和子类之间实现

多态

J2SE之面向对象编程_第2张图片


对象和类的概念

对象用计算机语言对问题中的事物描述,对象通过“属性”(attribute)和“方法”(method)来分别对应事物所具有的静态属性和动态属性。类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性。类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

Java与面向对象

对象是Java程序的核心,在Java程序中“万事万物皆对象”。对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体。类是用来创建同以类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法。J2SDK提供了很多类供程序员使用,程序员也可以定义自己的类。(成员变量=属性   方法=函数)

为什么用对象

面向对象的编程由一组对象相互配合通过沟通完成特定功能。所有的paradigm都是对现实问题的抽象。汇编是对机器语言的抽象,面向过程的语言是对汇编的抽象,对象更加符合对于实现问题的抽象。对象都有对外服务的接口(通过继承可以复用)。对象隐藏内部服务的实现(通过聚合可以复用)。面向对象更加容易使我们达到这些年来苦苦追求的境界(Reusable、Extensibility、维护和替换更加方便)组件—比对象更高的层次上的抽象/二进制级别(EJB、Web Service、CORBA、COM)。

Java类的定义

类的定义主要有两方面组成:成员变量和方法。声明成员变量的格式为:private int id;  private int age=20; 声明方法的格式为:public void getAge(){return age;}

J2SE之面向对象编程_第3张图片

成员变量

成员变量可以使Java语言中任何一种数据类型(包括基本数据类型和引用类型)。在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的对其初始化。成员变量的作用范围为整个类体。(局部变量Java不会默认初始化,必须给他初始化,成员变量不用初始化,Java会默认初始化)

Java面向对象的基本概念--引用

Java语言中除基本类型之外的变量类型都称之为引用类型。Java中的对象是通过引用对其操作的。例如:String s;(声明了一个String类型的引用变量,但没有使它指向一个对象)s = new String("Hello World");(使用new语句创建了一个String类型的对象并用s指向它,以后可以通过s完成对其的操作)。如何在内存中区分类和对象:类是静态的概念,它是放在代码区里的。对象是new出来的,它在堆内存里,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。

对象的创建和使用

1.必须使用new关键字创建对象。2.使用对象(引用).成员变量来引用对象的成员变量。3.使用对象(引用).方法(参数列表)来调用对象的方法。同一类的每个对象有不同的成员变量存储空间。同一类的每个对象共享该类的方法。

构造方法(构造函数)

使用new+构造方法创建一个新的对象。构造函数是定义在Java类中的一个用来初始化对象的函数。构造函数与类同名且没有返回值。

构造函数

创建对象时,使用构造函数初始化对象的成员变量叫做构造函数。当没有指定构造函数时,编译器为类自动添加如   类名(){}的构造函数。

约定俗成的命名规则:1.类名的首字母大写。2.变量名和方法名的首字母小写。3.运用驼峰标识。

方法的重载/构造方法的重载

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数选择对应的方法。与普通方法一样,构造方法也可以重载。

方法的重写

在子类中可以根据需要对从父类中继承来的方法进行重写。重写方法必须和被重写方法具有相同方法名、参数列表和返回值类型。重写方法不能使用比被重写方法更严格的访问权限。

this关键字

在类的方法定义中使用this关键字代表使用该方法的对象的运引用。当必须指出当前使用方法的对象是谁时要用this。有时使用this可以处理方法中成员变量和参数重名的情况。this可以看作是一个变量。它的值是当前对象的引用。

static关键字

在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员,(静态方法不再是针对于某个对象调用,所以不能访问非静态成员)可以通过对象引用或类名(不需要实例化)访问静态成员。

super关键字

在Java类中使用super来引用父类的成分。

final关键字

final变量的值不能够被改变(final的成员变量和final的局部变量(形参))。final的方法不能被重写,final的类不能被继承。

package和import语句

为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多命名空间。package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)。Java编译器把包对应与文件系统的目录管理,package语句中,用“.”来指定包的层次,例如:package com.sxt;(该文件中所有的类位于.\com\sxt目录下)。如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.sxt.MyClass),Java编译器才会找到该类。也可以使用import在文件的开头引入要使用的类。

J2SDK中主要的包介绍

Java.lang:包含一些Java语言的核心类,如String、Math、Lnteger、System和Thread。提供常用功能。  Java.awt:包含了构成抽象窗口工具集(abstract  window  toolkits)的多个类。这些类被用来构建和管理应用程序的图形用户界面(GUI)。  java.applet:包含applet运行所需的一些类。  Java.net:包含执行与网络相关的操作的类。  Java.io:包含能提供多种输入/输出功能的类。  Java.util:包含一些实用工具类,如定义系统特性,使用与日期日历相关的函数。

类的继承与权限控制

Java中使用extends关键字实现类的继承机制。通过继承,子类自动拥有了父类的所有成员(成员变量和方法)。Java只支持单继承,不允许多继承(一个子类只能有一个父类,一个父类可以有多个子类)。

访问控制

Java权限修饰符置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。对于class的权限修饰只可以用public和default。public类可以在任意地方被访问,default类只可以被同一个包的内部类访问。

继承中的构造方法

子类在构造的过程中必须调用其父类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用父类的构造方法。使用this(argument_list)调用本类另外的构造方法,如果调用super,必须写在子类构造方法的第一行。如果子类的构造方法中没有显示调用父类构造方法,则系统默认调用父类无参数的构造方法。如果子类构造方法中既没有显示调用父类构造方法,而父类中又没有无参的构造方法,则编译错误。

Object类

Object类是所有Java类的根基类(父类)。如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类。

toString方法

Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息。在进行String与其它类型数据的连接操作时(如:System.out.println("info"+person)),将自动调用该对象类的toString()方法。可以根据需要在用户自定义类型中重写toString()方法。

equals方法

Object类中定义有:public boolean equals(Object obj)方法(提供定义对象是否“相等”的逻辑)。Object的equals方法定义为:X.equals(y);当x和y是同一个对象的应用时,返回true,否则返回false。J2SDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法,x.equals(y);当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回true,否则返回false。可以根据需要在用户自定义类型中重写equals()方法。

对象转型(casting)

一个父类的引用类型变量可以“指向”其子类的对象。一个父类的引用不可以访问其子类对象新增的成员(属性和方法)。可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。子类的对象可以当作父类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。

动态绑定和多态

动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

抽象类

用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。抽象类不能被实例化,抽象方法只需声明,而不需实现。

接口(interface)

接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

接口的特性

1.多个无关的类可以实现同一个接口。2.一个类可以实现多个无关的接口。3.与继承关系类似,接口与实现类之间存在多态性。4.接口中声明属性默认为public  static  final的;也只能是public  static  final的。5.接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的。6.接口可以继承其它的接口,并添加新的属性和抽象方法。

你可能感兴趣的:(J2SE之面向对象编程)