首页 > 编程语言 >Java面向对象(OOP)概念

Java面向对象(OOP)概念

时间:2023-02-01 19:23:54浏览次数:33  
标签:draw Java 多态性 void 面向对象 OOP java 方法 public

在本节中,将了解面向对象(OOP)的基础知识。面向对象编程只是一个模式,它提供许多概念,如继承,数据绑定,多态等等。

Simula是第一种面向对象的编程语言。而一切都可表示为对象的编程模式被称为真正的面向对象的编程语言。Smalltalk是第一个真正的面向对象的编程语言。

1. 面向对象编程

对象表示真实的单词实体,如:笔,椅子,表等。面向对象编程是一种使用类和对象来设计程序的方法或模式。它通过提供一些概念简化了软件开发和维护:

  • 对象
  • 继承
  • 多态性
  • 抽象
  • 封装
  • 组合

1.1. 对象

任何具有状态和行为的实体都称为对象。例如:椅子,钢笔,桌子,键盘,自行车等。它可以是物理和逻辑的。

1.2. 类

对象的集合称为,它是一个逻辑实体。

1.3. 继承

当一个对象获取父对象的所有属性和行为时,称为继承。它提供代码可重用性,它用于实现运行时多态性。
继承是面向对象的编程概念,一个对象基于另一个对象构建。继承是代码重用的机制, 被继承的类称为超类,继承超类的类称为子类。
在java中使用extends关键字来实现继承。下面是java中继承的一个简单示例。

class SuperClassA {
    public void foo(){
        System.out.println("SuperClassA");
    }

}
// 继承 SuperClassA 类
class SubClassB extends SuperClassA{

    public void bar(){
        System.out.println("SubClassB");
    }

}

1.4. 多态性

当一个任务通过不同的方式执行时,称为多态性。例如:以不同的方式说服客户,画一些东西,如:形状或矩形等。在java中,使用方法重载和方法重写来实现多态性。另一个例子是说话,人说人话,猫说话可以是:“喵喵”,而狗说话可能是“旺旺”等,说话时表示和声音也不太一样。

参考以下代码 -

package com.lyt.model;

public class Circle {
public void draw(){
System.out.println("绘制圆形,默认颜色为黑色,直径为1厘米。");
}
public void draw(int diameter){
System.out.println("绘制圆形,默认颜色为黑色,直径为 "+diameter+" 厘米。");
}

public void draw(int diameter, String color){
System.out.println("绘制圆形,颜色为 "+color+" ,直径为 "+diameter+" 厘米。");
}



}

这里有多种draw()方法,它们都有不同的行为。这是方法重载的一种情况,因为所有方法名称都相同且参数不同。这里编译器将能够识别在编译时调用的方法,因此这也称为编译时多态

当在对象之间具有“IS-A”关系时,实现运行时多态性。这也称为方法重写,因为子类必须覆盖超类方法。

如果在超类中,实际的实现类是在运行时决定的。编译器无法决定将调用哪个类方法。此决定在运行时完成,因此这也叫作运行时多态动态方法分派

1.4. 多态性

当一个任务通过不同的方式执行时,称为多态性。例如:以不同的方式说服客户,画一些东西,如:形状或矩形等。在java中,使用方法重载和方法重写来实现多态性。另一个例子是说话,人说人话,猫说话可以是:“喵喵”,而狗说话可能是“旺旺”等,说话时表示和声音也不太一样。

参考以下代码 -

public class Circle {

    public void draw(){
        System.out.println("绘制圆形,默认颜色为黑色,直径为1厘米。");
    }

    public void draw(int diameter){
        System.out.println("绘制圆形,默认颜色为黑色,直径为 "+diameter+"  厘米。");
    }

    public void draw(int diameter, String color){
        System.out.println("绘制圆形,颜色为 "+color+" ,直径为  "+diameter+" 厘米。");
    }
}
Java

这里有多种draw()方法,它们都有不同的行为。这是方法重载的一种情况,因为所有方法名称都相同且参数不同。这里编译器将能够识别在编译时调用的方法,因此这也称为编译时多态

当在对象之间具有“IS-A”关系时,实现运行时多态性。这也称为方法重写,因为子类必须覆盖超类方法。

如果在超类中,实际的实现类是在运行时决定的。编译器无法决定将调用哪个类方法。此决定在运行时完成,因此这也叫作运行时多态动态方法分派

方法重写示例

类:Shape.java

public interface Shape {

    public void draw();
}
Java

类:Circle.java

public class Circle implements Shape{

    @Override
    public void draw(){
        System.out.println("绘制圆形");
    }
}
Java

*类:Square.java*

public class Square implements Shape {

    @Override
    public void draw() {
        System.out.println("绘制长方形");
    }

}
Java

Shape是超类,它有两个子类CircleSquare,下面是运行时多态性的示例。

类:PolymorphismTest.java

public class PolymorphismTest {

    public static void main(String args[]){
        Shape sh = new Circle();
        sh.draw();

        Shape sh1 = getShape(); //一些确定形状的第三方逻辑
        sh1.draw();
    }
}
Java

在上面的示例中,java编译器不知道在运行时使用的是哪个Shape的实现类,因此运行时多态性。

1.5. 抽象

隐藏内部细节和显示功能称为抽象。例如:电话,但我们不知道内部是如何处理通话/通信的。

抽象是隐藏内部细节和用简单的术语描述事物的概念。例如,添加两个整数的方法。该方法的内部处理对外界是隐藏的。有许多方法可以在面向对象的程序中实现抽象,例如封装和继承。

Java程序也是抽象的一个很好的例子。这里java负责将简单语句转换为机器语言,并隐藏外部世界的内部实现细节。

1.6. 封装

将代码和数据绑定(或包装)在一起成为单个单元称为封装。例如:胶囊,它包裹着不同的药物。

一个java类是封装的例子。Java bean是完全封装的类,因为所有的数据成员在这里是私有的。

封装是用于在面向对象编程中实现抽象的技术。封装用于对类成员和方法的访问限制。

访问修饰符关键字用于面向对象编程中的封装。例如,java中的封装是使用privateprotectedpublic关键字实现的。

1.7. 组合

组合是聚合的特例。组合是一种更具限制性的聚合形式。当“HAS-A”关系中包含的对象不能独立存在时,那就是组合的情况。例如,房子里有房间。没有房子,这里的房间不可能存在。

2. 面向对象编程的优点

  1. OOP使开发和维护变得更容易,因为在面向过程的编程语言中,如果代码随着项目规模的增长而增长,则不容易管理。

  2. OOP提供数据隐藏,而在面向过程的编程语言中,可以从任何地方访问全局数据。

  3. OOP提供更有效地模拟真实世界事件的能力。如果使用面向对象的编程语言,我们可以提供真实世界里的问题的解决方案。

 

 

















标签:draw,Java,多态性,void,面向对象,OOP,java,方法,public
From: https://www.cnblogs.com/cnetsa/p/17083918.html

相关文章

  • Java命名约定
    Java命名约定是一个规则,决定标识符使用什么命名规则,如类,包,变量,常量,方法等的命名规则。但是,它并不是强制要求必须遵循。这称为约定不规则。java编程语言的所有类,接口,包,方......
  • java 判断 class 类型
    1.instanceof。用来判断一个对象是否为一个类的实例。2. Class.isInstance3.  Class.isAssignableFrom。判断父类,参数为本身或者其子类。4. Class.isPrimitive。......
  • 1.1 JavaScript简介
    1.1.1JavaScript的基本概念JavaScript是一种解释性语言,也是一种基于对象(Object)和事件驱动(EventDriven)的、并具有安全性能的脚本语言。特点【1.JavaScript主要用来向......
  • 【8】Python3之面向对象
    1、面向对象基本概念 3、类的概念对象如何产生?又是如何规定对象的属性和方法呢?答:在Python中,采用类(class)来生产对象,用类来规定对象的属性和方法!也就是说,在Python中,要......
  • Java两大工具库:Commons和Guava(4)
    您好,我是湘王,这是我的51CTO博客。值此新春佳节,我给您拜年啦~祝您在新的一年中所求皆所愿,所行皆坦途,展宏“兔”,有钱“兔”,多喜乐,常安宁!在Nginx中提到过通过限流算法实现对后端......
  • Java两大工具库:Commons和Guava(4)
    您好,我是湘王,这是我的博客园。值此新春佳节,我给您拜年啦~祝您在新的一年中所求皆所愿,所行皆坦途,展宏“兔”,有钱“兔”,多喜乐,常安宁!   在Nginx中提到过通过限流算法......
  • java 天干地去标准类库
    https://6tail.cn/calendar/api.html#start.html//maven<dependency><groupId>cn.6tail</groupId><artifactId>lunar</artifactId><version>1.2.28</version>......
  • JavaScript 数组去重
    JavaScript中有多种方法可以实现数组去重,下面是几种常用的方法:1、使用Set去重:Set数据结构中不能有重复元素,可以将数组转成Set类型,再转回数组。letarr=[1,2,3,4......
  • java引用
    今天没事看树结构公共方法发现了个问题,这个树结构工具类为什么对parent的子集children操作会影响到nodeMap啊,parent不是单纯被nodeMap赋了个值吗,怀揣着好奇我便开始面向百......
  • Java并发编程——ForkJoinPool
    一、ForkJoinPoolForkJoinPool是JDK7引入的,由DougLea编写的高性能线程池。核心思想是将大的任务拆分成多个小任务(即fork),然后在将多个小任务处理汇总到一个结果上(即j......