封装
何为封装
将抽象性函式接口的实现细节部分包装、隐藏起来的方法
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
如何封装
首先,我们需要修改属性的可见性来限制对属性的访问,一般用private
关键词进行限制。
像这样我就封装了两个字段,封装之后我们不能在其他类中自由调用,因为它不是公开的属性!
但是我们如何让他可以修改,并且还保持安全性呢?
我们可以对他进行重构,封装成方法,在IDEA中,提供了快捷的右键,可以快速生成。
执行一键封装后效果如下。
public class Demo { private String i; private int x; public static void main(String[] args) { } public String getI() { return i; } public void setI(String i) { this.i = i; } public int getX() { return x; } public void setX(int x) { this.x = x; } }
大家可能注意到了,封装的方法是public
修饰的,所以public
方法是外部类访问该类成员变量的入口,这些方法被称为getter和setter方法。
继承
何为继承
第二大特征——继承!
何为继承?字面上理解,子承父业,即为继承。
那其实Java也是一样,一个(多个)类继承另一个类的特征,我们称之为继承。
如何继承
我们上面就说过,继承要子承父业,那如何定义父亲与儿子呢?
我们的extends
关键词可为类指定它的父亲。
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
/** * 父类 */ public class Demo { } /** * 子类 */ class son extends Demo{ }
这段代码是单继承,只有一个子一个父,而我们的Java是没有多继承的,但是有个关键词可以变相的定义多继承——implements
这里就不细说了。
继承到底有什么用呢?
看这里,son类是子类,它里面并没有输出语句,但是他却输出了父类里面的语句。
相当于它继承了父亲的财产。而假设我们将多个类的共同的放在父类里面,我们是不是可以节省很多代码呢?
那么问题来了,我如果想让父类中的一个属性或者方法啥的不被继承怎么办?
我们可以使用final
来定义不想被继承的方法或者属性,如下代码块一样。
/** * @author woo-m */ /** * 父类 */ public class Demo { final static void main(String[] args) { System.out.println("父类"); } } /** * 子类 */ class son extends Demo{ }
同名情况下,如何选择父类与子类
/** * 定义动物类 */ class Animal { void show() { System.out.println("动物"); } } /** * 狗类定义动物类为父类 */ class Dog extends Animal { @Override void show() { System.out.println("狗"); } void showTest() { this.show(); // this 调用自己的方法 super.show(); // super 调用父类方法 } } /** * @author woo-m */ public class Demo { public static void main(String[] args) { Animal a = new Animal(); a.show(); Dog d = new Dog(); d.showTest(); } }
这里,你可以看到,我这里使用this
来指向自己类中定义的show
方法,而super
可以指向父类的show
方法。
这里就不多讲,自己理解!
多态
何为多态
欲解其用,必知其理。
我们先来看看,啥是多态!
- 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
- Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
也就是说,你有许许多多的特点,你的特点可以分为多个类,你可以是人,可以是学生,同时你也是程序员。
多态体现为父类引用变量可以指向子类对象,不过,前提条件:必须有子父类关系。
多态优势
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
使用多态
多态这里难以文字描述,需要自己悟出来,我就不写了。