封装
在面向对象程式设计方法中,封装(英语Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
//简单的例子
public class ZhangSan extends Person{
//姓名
private String name;
//年龄
private int age = 0;
//张三出生的时候就就叫张三, 0岁
public ZhangSan(String name){
this.name = name;
}
@Override
public void eat() {
System.out.println("张三吃大葱!");
}
//张三就一个名字 可以让别人知道 但是不能让别人乱改名字
public String getName() {
return name;
}
public int getAge() {
return age;
}
//张三的年纪是随时间在变化的
public void setAge(int age) {
this.age = age;
}
}
继承
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
1.JAVA中类只能单继承,一个类只能继承一个类,但是一个类能实现多个接口。
2.JAVA中一个接口是可以继承多个接口的。
public interface ServiceA {
}
public interface ServiceC {
}`
//这里是可以多继承得
public interface ServiceB extends ServiceA, ServiceC{
}
多态
多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
//这里是个简单的例子
public abstract class Person {
public abstract void eat();
}
public class ZhangSan extends Person{
//重写父类的方法 张三喜欢吃大葱
@Override
public void eat() {
System.out.println("张三吃大葱!");
}
}
public class LiSi extends Person{
@Override
public void eat() {
System.out.println("李四吃大饼!");
}
}
public class Test {
public static void main(String[] args) {
//父类指向子类对象 也叫 向上转型
Person zhangSan = new ZhangSan();
Person liSi = new LiSi();
zhangSan.eat();
liSi.eat();
}
}
//输出内容
//张三吃大葱!
//李四吃大饼!
Java实现多态有三个必要条件:继承、重写、父类引用指向子类对象。
多态的实现方式
- 重写
- 接口