Java面向对象的三个特征:封装、继承、多态

一、封装

定义

封装就是将数据或函数等集合在一个个的单元中,通俗来讲就是将属性或方法定义在一个类中

意义

封装的意义在于保护或者防止代码被意外修改。

封装提供了一个有效的途径来保护数据不被意外的破坏。将数据的作用域在程序中定义为public改为private在很多方面会更好。私有的数据可以用两种方式来间接的控制。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。

封装时的权限控制符区别如下:
这里写图片描述
作用域使用原则:尽量使用private

/**
 * 封装
 */
public class Animal {
    //私有化属性
    private String name;

    //私有化方法
    private void eat(){
    }
}

二、继承

继承主要实现重用代码,节省开发时间。继承通过extends关键字来实现

/**
 * 继承
 */
public abstract class Animal {

    public abstract void eat();
}

public class Dog extends Animal {
    @Override
    public void eat() {

    }
}

三、多态

定义

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

多态的三个条件:
继承、重写、父类引用指向子类对象

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

多态的实现方式:重写、接口、抽象类和抽象方法

public class Person {

    private void eat(){
        System.out.println("人吃饭!");
    }
}

public class Chinese extends Person{
    // 重写父类方法
    public void eat() {
        System.out.println("中国人在吃饭!");
    }
}

public class English extends Person{
    // 重写父类方法
    public void eat() {
        System.out.println("英国人在吃饭!");
    }
}

// 测试类
public class TestEat {
    public static void main(String[] args) {
        TestEat test = new TestEat();
        // 引用指向中国人,创建中国人类对象
        Person person1 = new Chinese();
        // 此时调用的是Chinese的eat()方法
        test.showEat(person1);
        Person person2 = new English();
        // 此时调用的是English的eat()方法
        test.showEat(person2);
    }

    // 使用父类作为方法的形参,实现多态
    public void showEat(Person person) {
        // 传入的是哪具对象就调用哪个对象的eat()方法
        person.eat();
    }

}

猜你喜欢

转载自blog.csdn.net/zyw0101/article/details/80658393