面向对象编程的三个基本特性

Java语言的三个基本特点 Java语言是面向对象的编程语言,故有三个基本特性,即:封装性,继承性,多态性。这三个特点主要体现在类上,下面对这三个特性逐一进行

Java语言的三个基本特点

Java语言是面向对象的编程语言,故有三个基本特性,即:封装性,继承性,多态性。这三个特点主要体现在类上,下面对这三个特性逐一进行讲解。

封装性

    • 封装即将数据密封起来,防止外界对数据进行更改。一般情况,类的属性就是被封住了的。

    • 封装性的几个优点:提高代码的安全性以保护数据、统一接口、隐藏代码的实现细节、增加系统可维护性

    • 对数据进行封住主要是通过访问权限修饰符private来实现的,而将数据封装后,就不能在类外调用、修改数据,因此需要用到类中的方法来实现。get()用来获取私有属性的值,set()用于修改私有属性的值(简而言之,就是通过类中的public方法来调用或修改类中的private属性)。

      //例题
      class Student{
         private: //定义了四个学生类的私有属性
         int age;
         int id;
         String name;
         String sex;
         public Student(){} //构造方法
         public void getAge(){ //获取并返回age的值
             return age;
        }
         public void setAge(int a){ //设置age的值
             age=a;
        }
       
      }

      继承性

      1. 继承是存在于面向对象程序中两个类之间的关系。被继承的类称为父类或超类,继承的类称为子类。子类可以调用父类的公用方法公用属性。Object类是所有类的父类。

      2. 继承的实现

        定义子类时,通过关键字extends来指明谁是父类。下面,以Person类,Teacher类,Student类来举例:

        class Person{
           public String sex;
           public int age;
           public void live(){}
        }
        class Teacher extends Person{
           public String subject;
           public void teach(){}
        }
        class  Student extends Person{
           public score;
           public study(){}
        }
      3. 构造方法在类继承中的作用

        要知道,构造方法是不能被继承的,而子类又要对从父类中继承的成员进行初始化,因此,在创建子类对象时,会先调用父类的构造方法然后再执行子类的构造方法。具体遵循以下原则:

        (1)子类可以通过在自己的构造方法的第一条可执行语句中通过关键字super来调用父类的构造方法。

        (2)若子类构造方法中没有super关键字,在创建对象时,系统将自动调用父类的无参构造方法,然后再执行自己的构造方法。注意:当没有关键字super,且父类中也没有无参构造方法时,在编译时会出错。

        多态性

        一般的,面向对象的多态性体现在两个方面:

        (1)方法的重载。

        (2)子类对父类方法的覆盖。也就是子类对父类方法的重新定义。

        1. 方法的重载

          方法的重载就是同一个类中存在多个方法名相同但参数不同的方法,参数的差异包括参数类型,参数个数等。

          在调用方法时,方法匹配的原则是:先进行“精准匹配“,若找不到匹配的方法,在进行”自动类型转换匹配“。

          所谓自动类型转匹配,就是将实参类型转换至与方法的形参表所匹配的类型。(自动类型转换是按照值类型的等级由低转到高,而强制类型转换需要自己对值进行转换。)

        2. 方法的覆盖

          子类将从父类继承的非私有方法在子类中重新定义,就是方法的覆盖。这是,在通过子类的对象调用方法时,调用的就是子类自己重新定义的方法。

          在对父类的方法进行重写时,应与父类具有完全相同的方法名,形参表,返回值类型一般也要相同。

          在对父类方法进行重写时,需要注意:

          (1)方法的覆盖不能改变方法的静态或非静态属性。

          (2)不允许子类中方法的访问修饰符比父类有更多限制。