JAVA面向对象三大特性总结

什么是面向对象?

  面向对象编程(Object Oriented Programming,OOP,面向对象的程序设计)。所谓“对象”在显示支持面向对象的语言中,一般是指类在内存中装载的实力,具有相关的成员变量和成员函数(也称为:成员方法)。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大降低了软件开发的难度,使编程就像搭积木一样简单。

什么是面向过程?

  面向过程编程(Procedure Oriented Programming,OPP,面向过程的程序设计)。是一种以过程为中心的编程思想,这些都是在以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。

以上概念均参考自百度词条

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

  这是由于OOP与OPP本质的区别,总结出来OOP特有的性状

1.封装

  JAVA中的访问权限修饰符:public、private、protected、default(不加访问修饰符)。访问权限范围:

  

访问权限 子类 整个项目
public
protected ×
default × ×
private × × ×

  这些访问修饰符,可以修饰类、属性、方法。

  封装:通过private修饰符,可以将修饰的内容私有化,拒绝外部直接访问(这里的访问即调用的意思),从而将接口(这里不完全指interface接口,指的是方法、属性的调用)与实现(封装的部分)分离。

2.继承

  提到继承就不得不说另一种方式----组合,这两张方式都是把一个类放到另一个类中。但是组合是显式的,继承是隐式的。

  在继承中,子类相对于父类是is-a(是一个)的关系。通过继承可以使用向上转型来将父类转变为子类的类型。

  在组合中,仅仅是将一个对象,放入到另一个类中作为该类的属性。是has-a(有一个)的关系。组合则不能使用向上转型。

    向上转型?

      在JAVA继承关系树中,父类总是在树的上方。所以子类转换成父类的过程称之为向上转型。

     //创建Cat对象,自动向上转型
        Animal animal1 = new Cat();
        animal1.eat();

        //创建Dog对象,自动向上转型
        Animal animal2 = new Dog();
        animal2.eat();

    向上转型?

      将父类转换成子类的过程称之为向下转型,此过程是不安全的

        //将本身就是Animal类型的Dog对象,向下转型
        Dog dog = (Dog)animal1;
        dog.eat();

        //将本身不是Animal类型的Dog对象,向下转型-------失败ClassCastException
        Dog dog1 = (Dog)animal2;
        dog1.eat();

3.多态

  多态:同一行为,产生不同的状态。

    同一行为,指用“同一个类型”的对象调用“同样的方法”

    不同状态,指产生了截然不同的结果

  原因:动态绑定,本质原因是因为调用方法主体的不同。

  什么是绑定?  

    * 将方法调用与方法主体的关联起来。

  绑定分为前期绑定和后期绑定(动态绑定),对于static、final(private默认是final的)修饰的方法都是前期绑定,所以对这些方法的调用不存在多态。

  多态的前提:方法的重载和重写,这样才能产生多个不同的方法主体,用于动态绑定。下面用例子来介绍:

  先定义一个动物类:

package com.demo2;

//动物接口
public interface Animal {

    //动物进食
    void eat();
}

  定义一个狗类,继承动物类:

package com.demo1;

//狗类
public class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("狗吃骨头。。。");
    }
}

  定义一个猫类,继承动物类:

package com.demo1;

//猫类
public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼。。。");
    }
}

  测试

package com.demo1;

//测试类
public class Demo {

    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.eat();
        cat.eat();

        System.out.println("多态的体现如下-------------------");

        //直接new一个Animal对象
        Animal animal = new Animal();
        animal.eat();

        //创建Cat对象,自动向上转型
        Animal animal1 = new Cat();
        animal1.eat();

        //创建Dog对象,自动向上转型
        Animal animal2 = new Dog();
        animal2.eat();

    }
}

  结果:

  可以看出当直接new出Dog对象或者Cat对象时。调用eat时,都是调用了自身的重写的eat方法。

  * 直接new出Animal对象,调用eat时,也是自身的eat方法。

  * 但是当创建了Dog对象时,用自动的向上转型转换为父类Animal类型时,再次调用eat方法,调用的是Dog类中的eat方法。

  同样都是Animal类型的对象调用eat方法(同一行为),

  直接new出Animal时,输出的是Animal类中的内容,从Dog对象向上转型成的Animal时,则输出Dog类中的内容(不同状态),这就是多态。

原文地址:https://www.cnblogs.com/yhj-notes/p/9742030.html

时间: 2024-10-13 12:34:27

JAVA面向对象三大特性总结的相关文章

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

Java基础1:深入理解Java面向对象三大特性

Java基础1:深入理解Java面向对象三大特性 三大特性:继承 封装 多态 继承 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类. 子类拥有父类非private的属性和方法. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法 Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承. public class Son extends Father{publi

Java面向对象三大特性 封装 继承 多态

1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,他们只调用开放的接口,而不用去关心内部的实现 举例: public class Human { private int age; private String name; public int get

java面向对象三大特性之继承

通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所有事与其它事情都存在一种特殊的关系. Java继承 Java继承是面向对象的最显著的一个特征.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力. Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但

java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍

封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员. 3.封装的基本要求是:把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数.在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的. 继承: 1.目的:实

java面向对象三大特性之封装

 其实以前一直在做Java开发的过程中或者刚开始初学的时候没有想那么多,都是单纯的一直去做,但是自从做了某个项目之后也慢慢发现很多时候,人的精力和脑力是有限的,总是会忘记以前做过或者学过的东西,慢慢就开始了写博客的习惯,一是可以自己加强一下,二是可以分享给别人可以和大家一起讨论一下,因为每个人的见解都会让你从中获得不同的东西,就想以前遇见的一个老师一样,他说他每讲一次讲面向对象都有着不同的感觉,所以也是对自己和还奋斗在一线程序员的一种鼓励吧,希望多少年后的我们回想起来,我们曾经也是那么的拼过.

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

Java基础知识面向对象三大特性

面向对象三大特性:一 封装:概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式.好处:将变化隔离;便于使用;提高重用性;安全性.封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问.二 继承好处:1:提高了代码的复用性.2:让类与类之间产生了关系,提供了另一个特征多态的前提.注意:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过supe

面向对象编程(十四)——面向对象三大特性之多态②

面向对象最核心的机制——动态绑定,也叫多态. 通过下面的例子理解动态绑定,即多态 1 package javastudy.summary; 2 3 class Animal { 4 /** 5 * 声明一个私有的成员变量name. 6 */ 7 private String name; 8 9 /** 10 * 在Animal类自定义的构造方法 11 * @param name 12 */ 13 Animal(String name) { 14 this.name = name; 15 } 16