封装
封装的含义
封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。也就是说封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。
封装的步骤
- 修改属性的可见性来限制对属性的访问(修改为private)
- 为每个属性创建一队赋值和取值方法,用于对这些属性的访问(创建getter/setter方法)
- 在赋值和取值方法中,加入对属性的存取限制(在getter/setter方法中加入属性控制语句)
为了实现良好的封装,我们通常将类的成员变量声明为private,在通过public方法来对这个变量来访问。对一个变量的操作,一般有读取和赋值两个操作,我们通常分别定义两个方法来实现这两个操作,一个是 getXX(XX表示要访问的成员变量的名字) 用来读取这个成员变量,另一个是 setXX() 用来对这个变量赋值。
封装的特点
优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
缺点
- 将变量等使用private修饰,或者封装进方法内,增加了访问步骤与难度
代码实例
class user {
protected String name; //用户名
protected int vip; //会员标识
protected int create_sum; //建造总数
//构造方法
public user(String name,int vip,int create_sum)
{
this.name=name;
this.vip=vip;
this.create_sum=create_sum;
}
//setter()、getter()是该对象对外开发的接口
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getVip() {
return vip;
}
public void setVip(int vip) {
this.vip = vip;
}
public int getCreate_sum() {
return create_sum;
}
public void setCreate_sum(int create_sum) {
this.create_sum = create_sum;
}
}
继承
继承的含义
多个类具有共同的属性(成员变量)与行为(成员方法)的时候,将这些共同的部分抽取出来定义到一个公共的类中,其他及各类可以与这个公共的类形成继承关系,从而在多个类中不需要重 复定义公共部分!这个公共的类就是父类,也称为超类或者基类,其他的类就是子类。子类可以直接访问父类的非私有化成员变量,访问父类的私有化成员变量可以使用super.get()方法。
继承关键字
继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。
super 与 this 关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
继承的特点
- 子类不能继承父类中访问权限为private的成员变量和方法。
- 子类可以重写父类的方法,及命名与父类同名的成员变量。
- 子类可以添加新的方法和属性。
- java是单继承,不能进行多继承。但是可以继承多层子类(不建议继承超过3层)
- 子类继承父类,但是对父类的成员变量是无法直接操作,只能通过父类继承过来的setter和getter方法.
继承的优点
- 减少代码量,能很好的提高复用率。
- 使类与类之间存在继承关系,是实现多态操作的前提。
继承的缺点
- 继承使得多个类之间具有了子父类关系,当一个类存在多个子类的时候,如果父类发生变化,那么这些子类会跟着一同变化,造成类与类之间的“强耦合”关系。
代码实例
实例可参考这篇文章
模拟抢红包程序多态
多态的含义
多态指的是对象的多种形态。
多态有两种:引用多态和方法多态。继承是多态的实现基础。
java程序中定义的引用变量所指向的具体类型和通过该引用类型发出的方法在调用时不确定,该引用变量发出的方法到底调用哪个类的实现的方法,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
多态类型
引用多态:父类引用指向本类对象或父类引用指向子类对象。
方法多态:父类引用相同,但指向对象不同,导致方法不同。(重写部分除外)
多态存在的前提(多态的三要素)
- 必须有子类和父类,具有继承或实现(继承)
- 子类必须重写父类的方法(重写)
- 父类的引用变量指向子类的对象(向上转型)
多态的特点
优点
- 可替换性,多态对一存在的代码具有可替代性
- 可扩充性:增加的子类不影响已存在的类的特性的运行和操作
- 接口性:多态时超类通过方法签名想子类提供了一个公共的接口,由子类来完善或者覆盖它而实现的
- 灵活性:在应用中体现了灵活多样的操作,提高了使用的效率
- 简化性: 多态简化对应用软件的代码的编写和修改过程,尤其在处理大量的对象的运算和操作时,这个特点尤为突出和重要
多态中的成员特点
- 成员变量:编译与运行时期都看父类!
- 成员方法:编译时期看父类,运行时期看子类
写在最后
继承、封装、多态这三大特性是Java开发中最基础也是最重要的概念,对这三个概念的理解只能越来越深入。但是同时也要注意自己的心态,要在最简单的问题上耐得住性子,思考和探索,真正内化于心。