Java面向对象编程思想

一、面向对象编程是什么

   面向对象编程(Object Oriented Programming,故常称OOP)并不是Java独有,而是一种编程的思想,Java、C++、Python均有对其实现。其本质是以创建模型体现出来的抽象思惟过程和面向对象的方法。模型是用来反映现实世界中事物特征的,任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更广泛、更集中、更深入地描述客体的特征。经过创建模型而达到的抽象是人们对客体认识的深化。java

二、OOP的优缺点

优势:易于维护与扩展,代码复用性高。因为面向对象有封装、继承、多态性的特性,能够设计出低耦合的系统,使系统更加灵活多变。
缺点:CPU开销大、占据资源多编程

三、三大特性

封装:隐藏对象的属性和实现细节,仅保留一些对外接口;
继承:子类能够继承父类的属性和方法;
多态:同一个行为具备多个不一样表现形式或形态的能力。ide

3.一、封装

   使用访问权限修饰符来实现对属性和方法的控制,包括private:仅限本类能够访问;default(默认权限):仅限本包能够访问;protected:仅限包内和继承的子类能够访问;public:都可访问。
  咱们在定义一个对象类时,一般对属性进行隐藏,提供公共的set、get方法进行访问。学习

/**
 * @author RuiMing Lin
 * @date 2020-03-05 16:01
 */
public class Person {

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() { return age; }

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3.二、继承

   继承可使子类得到父类的全部非私有属性和方法,减小了代码的复用。继承可使对象层次化,类型比较明确。大数据

/**
 * @author RuiMing Lin
 * @date 2020-03-05 18:18
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son("小明",23);
        s.eat();        //从父类继承的方法
        s.sleep();      //从新父类的方法
        s.study();      //子类本身定义的方法
    }
}

class Father{
    String name;
    int age;

    public Father(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    public void sleep(){
        System.out.println("父亲睡觉");
    }
}

class Son extends Father{
    public Son(String name, int age) {
        super(name, age);
    }

    @Override
    public void sleep(){
        System.out.println("儿子睡觉");
    }

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

3.三、多态

public abstract class Animal { 
    public abstract void eat(); 
}
class Cat extends Animal { 
    public void eat() { 
        System.out.println("吃鱼"); 
    } 
}
class Dog extends Animal { 
    public void eat() { 
        System.out.println("吃骨头"); 
    } 
}
public class Test { 
    public static void main(String[] args) { 
    // 多态形式,建立对象 
    Cat c = new Cat(); 
    Dog d = new Dog(); 
    // 调用showCatEat 
    showCatEat(c);
    // 调用showDogEat
    showDogEat(d); 
    showAnimalEat(c); 
    showAnimalEat(d); 
}
    public static void showCatEat (Cat c){ 
        c.eat(); 
    }
    public static void showDogEat (Dog d){ 
        d.eat(); 
    }
    public static void showAnimalEat (Animal a){ 
        a.eat(); 
    } 
}

   因为多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,能够把Cat对象和Dog对象传递给方法。当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果天然与showCatEat、showDogEat方法一致, 因此showAnimalEat彻底能够替代以上两方法。不只仅是替代,在扩展性方面,不管以后再多的子类出现,咱们都不须要编写showXxxEat方法了,直接使用 showAnimalEat均可以完成。 因此,多态的好处,体如今可使程序编写的更简单,并有良好的扩展。ui

3.3.一、多态运行规则

  编译期如果父类(父接口)拥有该方法或类,则使用的IDE不会报错;运行期则看具体的类型,如果该类该方法或类,则使用的IDE不会报错。this

  1. 成员变量:编译期看左边,运行期看左边;
  2. 静态方法:编译期看左边,运行期看左边;
  3. 非静态方法:编译期看左边,运行期看右边。

四、总结

  面向对象编程思想不一样于面向过程编程,它的使用更加的严格与规范。Java的面向对象编程更是有许多规范,须要对Java学习的更加深刻才会对它更好的理解。设计

  

有错误的地方敬请指出,欢迎你们评论区或者私信交流!每日持续更新Java、Python、大数据技术,请你们多多关注!code

相关文章
相关标签/搜索