Java面向对象程序设计

来源:互联网 发布:管家婆软件导出excel 编辑:程序博客网 时间:2024/04/28 05:35

OOP的概念

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。

面向对象的程序设计。所谓“对象”就是一个或一组数据以及处理这些数据的方法和过程的集合。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。

面向对象的三大特性

特征

定义

具体实现方式

优势

封装

隐藏实现细节,对外提供公共的访问接口属性私有化、添加公有的setter、getter方法增强代码的安全性和可维护性

继承

从一个已有的类派生出新的类,子类具有父类的一般特性,以及自身特殊的特性继承需要符合的关系:is-a1、实现抽象(抽出像的部分) 2、增强代码的可复用性

多态

 同一个实现接口,使用不同的实例而执行不同操作通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类定义不同的操作增强代码的可扩展性、可维护性

一、封装

封装就是将属性私有化,提供公共的方法访问私有属性。

通过封装,可以实现对属性的数据访问限制(安全性),同时增强了程序的可维护性(维护性)。 

如:

public class User
{
      //私有属性
      private String name;
      private int age;
 
      //封装属性,添加公有的setter、getter方法
      public String getName() {
      return name;
      }
     public void setName(String name) {
     this.name = name;
     }
 
     public int getAge() {
     return age;
     }
     public void setAge(int age) {
     this.age = age;
     }
}

二、继承

在OOP(面向对象编程)术语中,如果有两个类,它们或多或少地具有一组相同的属性和方法。我们可以创建一个具有两个类共同属性的父类,再编写两个子类去继承父类的全部或部分属性,而不去创建两个单独的类。这样可以确保相同部分的属性和方法代码只编写了一次,因而减少了代码量,并提高了代码的可重用性。

继承的主要优势在与代码的可重用性。

在继承关系中,父类和子类需要满足is-a的关系。父类更通用,子类更具体。父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有自己特殊的特征和行为。

在Java语言中,用extends(extends代表扩展的意思)关键字来表示一个类继承了另一个类。

如:

public child extends parent{    }

使用super关键字调用父类的方法,如:super.父类方法()。其中使用super()调用父类构造方法,必须是子类构造方法中的第一条语句,因为创建对象时,要先创建父类对象,再创建子类对象。

除了构造方法以外,父类的所有方法和属性都被子类的对象继承。

在Java中,所有的Java类都直接或间接地继承了java.lang.Object类。Object类是所有Java类的祖先。

三、多态

什么是多态:简单来说,多态是具有表现多种形态的能力的特征。更术语化的说法是:同一个实现接口,使用不同的实例而执行不同的操作。

多态的实现步骤:

  • 子类重写父类的方法
  • 把父类类型作为参数类型,该父类及其子类对象作为参数传入
  • 运行时,根据实际创建的对象类型动态决定使用哪个方法

多态性与继承、方法重写有密切关系。使用多态的好处是:不仅能减少代码的工作量,也能大大提高程序的可维护性及可扩展性。

在多态中,重载和重写的概念很重要,方法的重载是静态多态性的示例,而方法的重写是动态多态性的示例。

重载:在Java中,可以在同一个类中使用相同的名称定义两个或多个方法,但参数项不同。当两个方法名称相同而参数项不相同时,那么认为此方法被重载,而此过程被称为“方法重载”。调用重载方法时,Java使用参数的类型和数量决定实际调用重载方法的哪个版本。重载方法可以具有不同的返回类型,但返回类型本身不足以区分方法的两个版本。因此,重载方法的参数类型或数量必须不同。

概括的说重载:

1.同一个类

2.多个同名方法

3.可以有不同返回类型

4.方法参数类型或数量必须不同

重写:在类体系结构中,当子类中的方法与其父类中的方法具有相同的方法时,则认为子类中的方法重写了父类中的方法。从子类中调用重写方法时,将总是调用出现在子类中的方法,而父类的方法将被隐藏。

概括的说重写:

1.继承父类,或实现接口的子类中

2.同名方法,返回类型相同,参数列表也相同

3.方法体不同

抽象方法和抽象类

抽象方法:父类中的某些方法不包含任何逻辑,并且需要由子类重写。在这种情况下,应该使用关键字abstract来声明父类中的方法。子类提供这种abstract方法的实现细节,而父类仅提供此方法的名称和声明,没有方法体。因此子类应负责重写此方法。

抽象方法声明:

abstract  type  methodname(parameter  list);

抽象类:任何包含一个或多个抽象方法的类也应该声明为抽象(抽象类)。抽象类中可以有普通方法(不是抽象方法),且普通方法可以有方法体;但抽象方法必须在抽象类中,且抽象方法不能有方法体。

抽象类的声明:

访问修饰符  abstract  class  类名 {  }

概括的说抽象类:

(1)抽象类不能被实例化。

(2)构造方法和static类方法不能声明为abstract。

(3)abstract类的任何子类必须实现在父类中的声明的所有abstract方法,否则子类必须声明为抽象类。

接口

在多态中,继承与接口这两个概念都很重要。实际问题中往往需要多重继承,但Java中只支持单一继承,为了弥补这一点,Java引入了接口的概念。

通俗地讲,接口就是某个事物对外提供的一些功能声明。

接口的定义:

在Java中要定义一个接口,是通过interface关键字。接口里可以声明一些方法和常量。

如:

// 有方法的接口

public interface firstInterface

{

       public void outPut(int  param);       //只提供方法声明,没有方法体

}

//定义程序使用的常量的接口

public interface MyConstants

{

      public static final double price=1422.00;     //在接口中的属性一定是常量(final),不能修改

      public static final int counter=5;

注意:一个接口也可以继承另一个接口或多个接口。

接口的实现和使用:

一旦接口被定义,一个或多个类可以实现该接口。一个类实现一个接口,用关键字implements,然后实现接口的所有定义的全部方法。

如:

public class InterfaceDemo  implements  MyInterface{  }

或实现多个接口:

public class 类名 implements  接口1,接口2,接口3,.....{  }

 

创建接口必须牢记一下几点:

  • 接口中的所有方法必须是public类型或默认类型。
  • 方法仅仅是声明或定义,而不要求实现。
  • 接口可以通过关键字extends继承其他接口。

实现接口需要注意的是:

当一个类实现一个接口时,它必须现实接口中定义的所有方法,否则该类必须声明为抽象类。