Java语言的三大特性即是:封装、继承、多态

首先先简单的说一下其3大特性的定义:

封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。封装的基本要求是: 把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的。

 

继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。在开发中尽量减少继承关系,这样做是为了把程序的耦合度降低。

 

多态:多态又分为设计时多态和运行时多态,例如重载又被称为设计时多态,而对于覆盖或继承的方法,JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。总而言之,面向对象的设计的典型特点就是继承,封装和多态,这些特点也是面向对象之所以能如此盛行的关键所在。

 

以上就是java三大特性的基本含义,大家理解一下就行了,千万别背啊!接下来我们通过一个例子来完美的解释一下java的3大特性。

用java做一个简单计算器;

import java.io.*;
class OperationAttridute
{
       private double numberA=0;
       private double numberB=0;
       private double result=0;
       public double setNumberA(double i)
       {
              return numberA=i;
       }
       public double getNumberA()
       {
              return numberA;
       }
       public double setNumberB(double j)
       {
              return numberB=j;
       }
       public double getNumberB()
       {
              return numberB;
       }
       public double setResult(double z)
       {
              return result=z;
       }
       public double getResult(double a,double b)
       {
              return result;
       }
}

//将要运算的2个数字和运算结果进行封装。

class OperationA extends OperationAttridute
{    
       public double getResult(double a,double b)
       {
              double result=0;
              result=a+b;
              return result;
       }    
}

//加法类:继承OperationAttridute类并且覆盖其getResult方法

class OperationS extends OperationAttridute
{
       public double getResult(double a,double b)
       {
              double result=0;
              result=a-b;
              return result;
       }
}

//减法类:继承OperationAttridute类并且覆盖其getResult方法

class OperationM extends OperationAttridute
{
       public double getResult(double a,double b)
       {
              double result=0;
              result=a*b;
              return result;
       }
}

//乘法类:继承OperationAttridute类并且覆盖其getResult方法

class OperationD extends OperationAttridute
{
       public double getResult(double a,double b)
       {
              double result=0;
              if(b==0)
              {
                     Throw new RuntimeException(“被除数不能为0”);
              }
              result=a/b;
              return result;
       }
}

//除法类:继承OperationAttridute类并且覆盖其getResult方法,除法要对被除数进行判断并抛出异常

class Operationdo
{
       public static Object expression_r(char r)
       {
              OperationAttridute oa=new OperationAttridute();       
              switch(r)
              {
                     case '+':
                     oa=new OperationA();                
                     break;
                     case '-':
                     oa=new OperationS();                 
                     break;
                     case '*':
                     oa=new OperationM();         
                     break;
                     case '/':
                     oa=new OperationD();         
                     break;                  
              }
              return oa;             
       }
}

//运算类:通过传进来的参数,来调用运算方法

class Account
{
       public static void main(String []args)throws Exception
       {
              char r='*';                   
              OperationAttridute oa=(OperationAttridute)Operationdo.expression_r(r);
              double a=oa.setNumberA(9);
              double b=oa.setNumberB(2);
              System.out.println(oa.getResult(a,b));  
       }
}

//主程序

这样,只需要输入运算符号,通过多态,返回父类的方式实现了计算器的结果。

 

通过以上的例子,我相信大家应该对java的特性有一个清醒的认识了。编程是一门艺术,只有深刻理解其思想才能创造出与众不同的代码,我一向认为,编码能力是可以练出来的,但是编程思想是需要不断的学习不断的总结,这样才能有质的飞跃!

大家共勉吧!