OOP的三大特性是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OOP的三大特性是啥?相关的知识,希望对你有一定的参考价值。

参考技术A

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

1、封装性:封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言组装到一起,一并封装在一个有机的实体中,把它们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块性提供良好的基础。

2、继承性:是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。

3、多态性:从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态;

从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。

扩展资料

面向对象程序设计的优点:

1、数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;

2、通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;

3、以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;

4、通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。

5、结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;

6、通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度。

参考资料来源:百度百科-面向对象程序设计 (一种计算机编程架构)

java第五章:面向对象(oop)三大特性之多态

多态(把代码写活,提高代码的扩展性和可维护性)

生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳12:金刚石,石墨)

程序中的多态:同一个“接口”因不同的实现,而执行不同的操作(就是在方法中把父类作为形式参数传入,调用的时候,传入子类的实例,最终执行的是子类中重写父类的方法)

 

多态一般结合方法重写、继承使用,父类引用指向子类;

多态实现步骤:

1.实现继承

2.编译时将父类作为形式参数类型传入(范围大一点,模糊一点)

3.运行时将子类new出的实例传入,最终执行的是子类中重写父类的方法。

 

类型的转换

1.子类转换为父类,称为自动转换,也叫向上转型

eg: Animal animal = new Dog();

注意:向上转型完之后,animal只能访问父类中的属性和方法,子类中自有的属性和方法无法访问,调用的是子类中重写父类后的方法;

2.父类转换为子类,称为强制转换,也叫向下转型

eg: Animal animal  = new Dog();

  Dog dog = (Dog)animal;        此时dog只能调用子类中的属性和方法,无法访问父类中的属性和方法。

 

final关键字,最终的意思

1.修饰变量,该变量就成了常量,不能重新被赋值

2.修饰方法,该方法不能被重写(在子类中)

3.修饰类,该类不能被继承(eg:java.lang包中的Math类和String类)

 

abstract关键字,抽象的意思

抽象方法:使用abstact修饰的方法,最显著的特点是没有方法体,就是提供给子类重写用的一种规范。

抽象类:使用abstract修饰的类,抽象类中可有可无抽象方法,可以有属性和构造方法。但是不能被实例化(不能new),天生为继承而生Animal animal = new Dog();

有抽象方法的类,一定是抽象类,必须是抽象类,要不然会报错。

抽象类的作用:防止编写程序的随意性,提供一种规范;

 

java中的设计模式(GOF),23种,是前人对经典问题总结出来的解决方案

单例模式:一个类只能创建一个实例对象,实现方法:构造方法私有化,提供一个共有的静态方法获取实例。

实现方式:1.饿汉式   2.懒汉式

 

 

简单工厂模式(静态工厂方法):可以生产产品,可以降低因生产产品而导致的耦合性过强(解耦合);

实现方式:1.编写父类和子类或接口和实现类

     2.编写静态工厂方法,返回值类型是父类或接口——>多态;

     3.根据用户的需求,动态创建子类对象,并返回

package cn.zzsxt.demo7.factory;
//创建父类
public abstract class AXE {
    public abstract void cut();
}

package cn.zzsxt.demo7.factory;
//创建石斧子类
public class StoneAxe extends AXE {

    @Override
    public void cut() {
        System.out.println("我是石斧,砍日本人钝!");
    }

}

package cn.zzsxt.demo7.factory.copy;
//创建铁斧子类
public class SteelAxe extends AXE{
    @Override
    public void cut(){
        System.out.println("我是铁斧,砍日本人锋利!");
    }
}

package cn.zzsxt.demo7.factory;
//创建静态工厂方法
public class AXEFactory {
    public static AXE getInstance(String str){
        AXE axe = null;
        if(str.equals("stone")){
            axe = new StoneAxe();
        }else if(str.equals("steel")){
            axe = new SteelAxe();
        }
        return axe;
    }
    
    public static void main(String[] args){
        AXE axe = AXEFactory.getInstance("stone");
        axe.cut();
        System.out.println("=========================");
        AXE axe2 = AXEFactory.getInstance("steel");
        axe2.cut();
    }
}

 

    

以上是关于OOP的三大特性是啥?的主要内容,如果未能解决你的问题,请参考以下文章

oop的三大特性和传统dom如何渲染

OOP的三大特性------封装继承多态

java第五章:面向对象(oop)之三大特性

java第五章:面向对象(oop)三大特性之多态

js面向对象的三大特性

OOP三大特性之封装:写出高内聚的clean code