JAVA的三大特性

众所周知,java的三大特性为:封装继承多态

一、 封装

1. 封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问。

2. 封装是怎么实现的呢?

   a. 需要修改属性的访问控制符(修改为private);

   b. 创建getter/setter方法(用于属性的读写);

   c. 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);

public class Student {
    private String id;
    private int score;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}

封装不是简单地将类的属性进行封装,还可以对方法进行封装。

说道这里,我就一直很奇怪为什么要封装,封装的好处是什么。

至于为什么需要封装,因为面向对象中所有的实体都是以对象为基本单位的,以宏观世界的实体来映射到计算机世界中,每个对象有它自己的属性和自己的行为,我们用类来将这些属性和行为封装到一起,当它实例化出来一个对象的时候,我们可以说这个对象具有这些属性和行为。不同类别的对象正是因为这些特性的不同,我们才可以将它们区分开,而这也正反映了我们现实生活中不同种类个体的不同。

举个例子,比如现在有一个Int类型的数据a,它的初始值为0,通过这个变量可以表达出学生的考试成绩。但是仅仅只能表达出学生的成绩为0分,不能表达出学生缺考的情况。但是如果我们现在成绩的类型变为Integer ,那么就不一样了,现在有一个Integer类型的数据b,它的初始值为null,通过null和0我们就能区分出来学生是0分还是缺考的两种不同状态。显然这就是分装的好处,能够更好地模拟现实情况。

二、 继承

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力,允许连续继承。

java继承的特性:

(1)继承关系是传递的。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

(3)继承提供了软件复用功能,能减小代码和数据的冗余度,大大增加程序的重用性。

(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

class Person {
    public Person() {
         //person的属性
    }
}
 
class Man extends Person {
    public Man() {
          //man的属性
    }
}

class Woman extends Person {
    public Woman () {
          //woman 的属性
    }
}

如上可以看出,Person类有Man和Woman的共同属性,但是Man和Woman又有不同的属性,这样既方便了代码的书写有增强了代码的可读性。继承就是当写一个类时,虽然这个类满足了某些功能但是又想拓展它的功能,此时就可以使用继承机制在写一个该类的子类,来完成需要的功能,一旦子类继承了父类就拥有了父类的方法与域(除私有方法和私有域),在子类中也可以重写父类的方法,覆盖父类中同名的方法,定义与父类相同的域,隐藏父类同名的域,实现子类需要的功能。继承的优点是提高了代码的效率,避免了代码重写。

三、 多态

多态指的是对象的多种形态。多态有两种:引用多态和方法多态。从一定角度来看,封装和继承几乎都是为多态而准备的。

多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。

它的作用是去耦合。

多态存在的三个必要条件:1,要有继承;2,要有重写;3,父类引用指向子类对象。

Java中多态的实现方式接口实现,继承父类进行方法重写,同一个类中进行方法重载。

public class Person {
        public void haircut() {
             System.err.println("我要剪发!"); 
        }
}
public class Man extends Person {
    public void haircut() {
          System.err.println("我要剪短发!");
    }
}
public class Woman extends Person {
    public void haircut () {
          System.err.println("我要剪长发!");
    }
}

如上的方法,同样是剪发,man和woman都是继承自person,并且重写了haircut()方法。

 

posted @ 2018-08-31 11:14  怡安  阅读(364)  评论(0编辑  收藏  举报