11.面向对象编程有哪些特性?

2022-01-01 131 0

面向对象编程有三大特性:封装、继承、多态。

封装是什么?

封装是指将数据(属性,或者叫字段)和操作数据的方法(行为)捆绑在一起,形成一个独立的对象(类的实例)。

class Nvshen {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

可以看得出,女神类对外没有提供 age 的 getter 方法,因为女神的年龄要保密。

所以,封装是把一个对象的属性私有化,同时提供一些可以被外界访问的方法。

继承是什么?

继承允许一个类(子类)继承现有类(父类或者基类)的属性和方法。以提高代码的复用性,建立类之间的层次关系。

同时,子类还可以重写或者扩展从父类继承来的属性和方法,从而实现多态。

class Person {
    protected String name;
    protected int age;

    public void eat() {
        System.out.println("吃饭");
    }
}

class Student extends Person {
    private String school;

    public void study() {
        System.out.println("学习");
    }
}

Student 类继承了 Person 类的属性(name、age)和方法(eat),同时还有自己的属性(school)和方法(study)。

什么是多态?

多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。

在我的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变;一个二郎神,也能七十二变;他们都可以变成不同的形态,只需要喊一声“变”。

多态其实是一种能力——同一个行为具有不同的表现形式;换句话说就是,执行一段代码,Java 在运行时能根据对象类型的不同产生不同的结果。

和孙悟空和二郎神都只需要喊一声“变”,然后就变了,并且每次变得还不一样;一个道理。

多态的前置条件有三个:

  • 子类继承父类
  • 子类重写父类的方法
  • 父类引用指向子类的对象
//子类继承父类
class Wangxiaoer extends Wanger {
    public void write() { // 子类重写父类方法
        System.out.println("记住仇恨,表明我们要奋发图强的心智");
    }

    public static void main(String[] args) {
        // 父类引用指向子类对象
        Wanger wanger = new Wangxiaoer();
        wanger.write();
    }
}

class Wanger {
    public void write() {
        System.out.println("勿忘国耻");
    }
}

相关文章

深拷贝和浅拷贝?
== 和 equals 的区别?
hashCode 与 equals?
final、finally、finalize 的区别?
final 关键字有什么作用?
18.静态变量和实例变量的区别?静态方法、实例方法呢?

发布评论