对封装、抽象、继承、多态的理解?(java四大特性)

时间:2022-10-31 21:54:34

封装是把过程和数据包围起来,对数据的访问只能通过自定义的接口,这个可以保护里面的数据和结构不被修改。

继承是实现代码复用的重要手段,Java的继承具有单继承的特点,每一个子类只允许有一个父类。通过继承子类就可以拥有父类的部分属性(私有属性除外)。

抽象是概念上的同一事物的共有属性或者方法的集合,比如抽象出一个人类,车类。抽象可以说是多态的基础。

多态是程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而在程序运行时才能具体知道变量指向哪一个类,该引用变量的方法具体指向哪个类中的方法。因为在程序运行时才能确定具体的类,这样不用修改源程序代码,就可以让引用绑定到各种不同类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态。(需要扩展了解一下)

下面我举一个栗子,阐述一下我的理解,比如现在定义了一个Person类,这只是一个抽象类

public abstract class Person{
public abstract void goWC();
}

现在这个抽象类只是把人去厕所这个抽象方法提了出来,但是抽象是没有用的,我们需要给他具体的实现,当今世界上只有两个性别,男人,女人,好像现在不能这么说了,那就是搞三个性别吧,男人,女人,人妖。hhh,我们来进行具体实现

public class Man extends Person {

@Override
public void goWc() {
System.out.println("sit up");
}

}

public class Woman extends Person{

@Override
public void goWc() {
System.out.println("sit down");
}
}

public class Yao extends Person {

@Override
public void goWc() {
System.out.println("这是一个谜");
}
}

让我们来看一下结果吧!

public static void main(String[] args) {
ArrayList<Person> list=new ArrayList<Person>();
list.add(new Man());
list.add(new Woman());
list.add(new Yao());
for (Person person : list) {
person.goWc();
}
}

运行结果:
sit up
sit down
这是一个谜

是不是很清真,也验证了不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态这个特性,上面还有抽象继承的思想在里面,用一个栗子解决三大特性。