Java-面向对象-封装、接口

编程自学指南:java程序设计开发,Java面向对象-抽象和封装,抽象类、接口、封装 编程自学指南:java程序设计开发,Java面向对象-抽象和封装,抽象类、接口、封装。抽象是将现实世界中的事物共性提取出来,忽略其具体细节,形成一种通用的概念或模型。在 Java 里,抽象主要借助抽象类和接口来实现。抽象类是包含抽象方法的类,而抽象方法仅有声明,没有具体实现。接口则是一种完全抽象的类型,其中所有方法都是抽象方法。 阅读详情

目录

封装介绍

封装的优点

实现封装的步骤

接口介绍

接口的声明语法

接口的特点

接口的实现

接口的多重实现

接口继承

接口与抽象类的区别

实例演示


封装介绍

封装(Encapsulation)是面向对象编程(OOP)的三大特性之一(另外两个是继承和多态)。它就像给你的代码穿上了一件"智能外套",既能保护内部数据,又能提供简洁的交互方式。

想象你有一个存钱罐:

  • 不封装:罐子完全敞开,任何人都可以随意拿取或放入钱币

  • 封装后:罐子有一个投币口(方法)和显示窗口(方法),但钱币不能被直接触碰

这就是封装的核心思想:隐藏对象的内部细节,仅暴露必要的操作接口。

封装的优点

  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。(内部变更不影响外部)
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。

实现封装的步骤

  • 修改属性的可见性来限制对属性的访问(一般限制为private)
public class BankAccount {
    private double balance;  // 私有变量,外部无法直接访问
    
    // 公共方法作为访问接口
    public double getBalance() {
        return balance;
    }
    
    public void deposit(double amount) {
        if(amount > 0) {
            balance += amount;
        }
    }
}

将类中的balance变量设置成了私有,外部无妨访问,从而实现了对信息的隐藏。

  • 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
public void setBalance(double amount) {
    if(amount >= 0) {  // 添加验证逻辑
        this.balance = amount;
    }
}

通过setter方法,getter方法来实现对私有变量的访问。

/* 文件名: EncapTest.java */
public class EncapTest{
 
   private String name;
   private String idNum;
   private int age;
 
   public int getAge(){
      return age;
   }
 
   public String getName(){
      return name;
   }
 
   public String getIdNum(){
      return idNum;
   }
 
   public void setAge( int newAge){
      age = newAge;
   }
 
   public void setName(String newName){
      name = newName;
   }
 
   public void setIdNum( String newId){
      idNum = newId;
   }
}

所以要访问任何私有变量的类都要通过这些setter、getter方法:

/* F文件名 : RunEncap.java */
public class RunEncap{
   public static void main(String args[]){
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");
 
      System.out.print("Name : " + encap.getName()+ 
                             " Age : "+ encap.getAge());
    }
}

接口介绍

  • 接口(Interface)是Java编程语言中一个非常重要的概念,它是抽象方法的集合,用于定义行为规范。
  • 接口是一种完全抽象的类,它只包含抽象方法和常量(在Java 8之前)。接口定义了一组方法签名(没有实现),任何实现该接口的类都必须提供这些方法的具体实现。

接口的声明语法

[访问修饰符] interface 接口名 [extends 父接口1, 父接口2...] {
    // 常量声明
    // 方法签名
}
//接口是允许多继承的

实例:

public interface Animal {
    void eat();
    void sleep();
}

接口的特点

  • 完全抽象:接口只能包含抽象方法(Java8可以使用 default 关键字修饰的非抽象方法)

  • 多继承:一个类可以实现多个接口,但只能继承一个类

  • 隐式公开:接口中的方法默认是public abstract的

  • 隐式静态常量:接口中的变量默认是public static final的

  • 不能实例化:不能直接创建接口的实例

  • 注意:接口不是要被类继承,而是要被类实现

接口的实现

类使用implements关键字实现接口,必须实现接口中所有的抽象方法(除非是抽象类)。

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }
    
    @Override
    public void sleep() {
        System.out.println("Dog is sleeping");
    }
}

接口的多重实现

public class Smartphone implements Camera, Phone, Computer {
    // 实现所有接口的方法
}

类是不允许多继承的,接口是允许的!!!

接口继承

接口与类的相似点,两者都可以继承:

public interface Shape {
    void draw();
}

public interface ColoredShape extends Shape {
    void setColor(String color);
}

接口与抽象类的区别

实例演示

// 定义接口
public interface Logger {
    void log(String message);
    default void logError(String error) {
        log("ERROR: " + error);
    }
}

// 实现接口
public class FileLogger implements Logger {
    @Override
    public void log(String message) {
        // 写入文件的实现
        System.out.println("Log to file: " + message);
    }
}

public class DatabaseLogger implements Logger {
    @Override
    public void log(String message) {
        // 写入数据库的实现
        System.out.println("Log to database: " + message);
    }
}

// 使用接口
public class Application {
    private Logger logger;
    
    public Application(Logger logger) {
        this.logger = logger;
    }
    
    public void process() {
        logger.log("Application started");
        // ...
        logger.logError("Something went wrong");
    }
    
    public static void main(String[] args) {
        Application app = new Application(new FileLogger());
        app.process();
        
        Application dbApp = new Application(new DatabaseLogger());
        dbApp.process();
    }
}

内存越界一定会导致程序崩溃吗?详解内存越界 本文详细解释了内存越界不一定导致内存越界的问题,全面介绍了C++内存越界的相关内容。 阅读详情

相关推荐

Centos7安装NVIDIA驱动并在docker容器中使用GPU

Centos7安装NVIDIA驱动并在docker容器中使用GPU

运维giao的博客 2084

【Java学习笔记】28.Java 封装及接口

本章介绍Java的封装和接口。

qq_62052372的博客 1501

从模型车到真实路口:基于YOLOv5-Lite与SORT的轻量化车流量检测系统实战

本文详细阐述了如何将基于YOLOv5-Lite与SORT的轻量化车流量检测系统从毕业设计原型部署到真实路口。文章聚焦于解决在嵌入式平台(如树莓派)上实现实时、稳定检测的工程挑战,涵盖数据采集、模型微调、系统集成及动态信号灯策略,为智能交通灯系统提供了实用的轻量化解决方案。

weixin_29179311的博客 125

JAVA开发常用API及封装

JAVA开发常用API及封装

今天又是充满希望的一天 4737

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

实测对比:DECIMER、Img2Mol、MolScribe,哪个化学结构识别工具更靠谱?

化学结构识别(CSR)工具的核心任务是将分子结构图像转换为SMILES(Simplified Molecular Input Line Entry System)表示。这一过程需要克服图像质量差异、绘制风格变化以及特殊基团识别等挑战。三款工具采用不同的技术路线:DECIMER:基于EfficientNetV2+Transformer架构,优势在于处理标准期刊文献中的分子图示Img2Mol。

weixin_32576389的博客 341

01 java 学习 数据类型、基础语法、封装、继承、多态、接口、泛型、异常等

Java的JRE(Java Runtime Environment)是Java平台上的运行时环境。它是Java应用程序运行所需的核心组件,包括Java虚拟机(JVM)、Java类库和其他必要的文件。JRE提供了执行Java程序的基本功能,它负责解释和执行Java字节码。当你运行一个Java程序时,JRE会将字节码转换为机器码,并在计算机上执行。除了Java虚拟机,JRE还包含了Java类库,这是一组预定义的类和方法,用于处理常见的任务,例如输入输出、图形用户界面、网络通信等。

prppr_的博客 1133

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

本文为本人在安装pgvector中踩过的坑,已找到解决方法,现向大家分享。

m0_62627802的博客 2万+

深入理解Java中的封装与接口:从概念到实现

封装(Encapsulation)指的是将数据(属性)和代码(方法)捆绑在一起,控制数据的访问和修改。封装的目标之一是防止外部直接访问或修改对象的内部数据,只允许通过特定的方法访问数据,从而确保数据的完整性和安全性。使用私有访问修饰符:将类的属性设置为私有(private),限制外部直接访问。提供公共的访问方法:通过公共(public)的getter和setter方法,使外部能够在受控的条件下访问和修改属性。首先,我们将类中的属性定义为私有,以确保这些属性不能被外界直接访问。// 私有属性。

Oliver9987的博客 1966

STM32入门教程:自动门控制

通过这个简单的示例,我们展示了如何使用STM32微控制器来实现一个简单的自动门控制系统。如果有物体靠近门口,我们会改变doorState的值,并使用controlServoMotor函数来控制舵机电机的转动。具体的引脚连接可以根据您的具体硬件来定,例如将红外传感器的输出引脚连接到GPIOA_PIN0引脚。同样,具体的引脚连接可以根据您的具体硬件来定,例如将舵机的控制引脚连接到GPIOA_PIN1引脚。首先,我们需要包含必要的库文件和引用。然后,我们需要定义一些函数来处理红外传感器的输入和舵机电机的输出。

m0_75244442的博客 577

ModuleNotFoundError: No module named‘langchain.schema.output parserlangchain.schema is not a package

电脑里现有的langchain库版本与import所需的不同,卸载原有langchain,重新下载最新的langchain。在步骤1后,若仍不可运行。在确保已重新下载新langchain后,重启python后,可正常运行。在版本号中填入所需的langchain版本号,可在requirements.txt查看。运行如下代码时,出现error。

weixin_45751925的博客 1713

Java之封装(Encapsulation)与接口(Interface)

封装(Encapsulation)        将抽象性函数接口的实现细节进行部分包装,隐藏,防止该类的代码和数据被外部类定义的代码随机访问的一种操作。        封装的特性:        1)是类的保护屏障,保障类代码的安全性。        2)想要访问该类的代码,必须经过严格的接口控制。        3)方便修改代码,不用修改调用代码的程序片段。        4)易于理解和代码维...

PythonGo 1万+

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1645

Java面向对象(OOP)封装、继承、多态、抽象类、接口

Java面向对象(OOP) 初识面向对象 方法回顾和加深 对象的创建分析 面向对象三大特性 抽象类和接口 内部类及OOP实战 面向过程 …& 面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二部…… 面对过程适合处理一些较简单的问题 面向对象思想 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索 面向对象适合处理复杂的问题,适合处理需要多人协作的问题 对于描述复杂的事物, 为了从宏观

xbd_zc的博客 1316

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JAVA面向对象五大特征总结——继承、封装、多态、抽象、接口

JAVA面向对象五大特征总结 五大特征: 继承、封装、多态、抽象、接口

weixin_42381196的博客 918

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java 面向对象 构造方法 封装 继承 抽象 接口

不可以 因为抽象类不可以实例化对象,只能用子类引用指向父类对象,所以抽象类是需要被继承的,而final是最终的意思且不能被继承。如果要不断的扩展游戏种类,那么每次都要去修改Game代码,这个不合理(有太多重复的代码)不方便,违反开闭原则。当需求发生变化时,应该是通过新增代码来实现,而不是修改代码,所以一般要结合多态的思想,处理这个问题。4.final修饰的属性(变量)的值不能更改,如果非要更改,报什么错?如果参数比较少,可以直接赋值,如果是私有的属性,可以调用父类的非私有的set方法,

2301_76814884的博客 1318

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java面向对象(封装,继承,多态,接口)

抽象方法只包含一个方法名,而没有方法体,方法名后面直接跟一个分号,而不是花括号;抽象类同样也用 abstract 修饰//抽象方法public abstract 返回值类型 方法名(参数列表);//抽象类public abstract class 类名{}首先为什么要有接口?从下图可以看出,动物类按照之前讲的,可以定义为抽象类,里面有“吃饭喝水”抽象方法,这时下面的子类都需要重写这两个方法。但是,”游泳“方法只有“青蛙和狗类”可以重写,所以将其定义为一个接口。什么是接口?接口用于。

java_lujj的博客 232

java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

1.封装在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码...

weixin_36415206的博客 196

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

转载请备注出自于:http://blog.youkuaiyun.com/qq_22118507/article/details/51422591 封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访...

Chen Rong的博客 184

java的面向对象编程思想(封装--继承--多态--接口)

1. 之前在微信公众号上看到一篇关于Java面向对象的编程思想,感觉写的很不错,可以学习一下,体验一下Java的面向对象的编程思想,当学习了Java比较久的时候再回来看这些知识的话,感觉会有更深一层的领会,我感觉在Java的学习中对于数据的封装是比较重要的,怎么样对于具体的问题使用恰当的数据结构来封装数据,这个是我们需要熟练掌握的,例如在之前的广度优先搜索的例子中,需要借助于队列来进行求解,因为涉...

二哈 689

【小白学java】java的面向对象设计:封装+继承+抽象类+接口(day06)

知识回顾 1)java api 应用程序接口(我们写的程序如何去调用jdk提供工具包,我们的程序代码如何和jdk的代码对接) 我们无需直接去面对硬件。Scanner对象,相关方法 nextInt()。我们的代码调用jdk提供api就可以操作计算机硬件。 2)系统有很多api,api手册,太多了,我建议百度,demo例子。更贴近开发。 3)常用的api方法都要记忆下来,有印象能百度,仿写(开发开卷考试) 4)实际开发就是利用api各个方法组合调用,最终实现用户需求 面向对象 1)面向过程(早期)、面向对象(主

长安紫薯的专栏 745

Java面向对象(二)_封装、static、继承、多态、抽象、接口

备注:如有错误请给予联系 1.面向对象的封装特性 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 要访问该类的代码和数据,必须通过严格的接口控制。 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代...

Warhol1221的博客 365

Java面向对象三大特性详解:封装、继承、多态与接口

本文深入解析了Java面向对象编程的三大核心特性:封装、继承和多态。通过具体代码示例展示了封装如何保护数据并提供统一接口;阐释继承实现代码复用和类层次构建的原理;详细分析多态在方法重写和对象转型中的运作机制,包括复杂场景下的方法调用规则。文章还结合内存模型说明了多态的实现原理,并简要提及接口的作用。最后给出了三大特性的实践建议,强调通过项目实践才能真正掌握面向对象编程精髓。全文通过理论解析与代码示例相结合的方式,为读者提供了对Java OOP核心概念的深入理解。

2402_83075343的博客 1112

【Java面向对象编程】方法 | 对象 | 面向对象(封装,继承,多态) |抽象类 | 接口

面向对象编程(Object-Oriented Programming ,OOP)面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。抽象 (抽取相同的部分)三大特征:封装 (把数据包裹起来,对外提供一个口)继承 (子类继承父类,子类有父类的所有东西)多态 (同一个事物有多种型态,表现出的事物也是不一样的)从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象从代码运行角度考虑是先有类后有对象。类是对象的模板。修饰符:static。

m0_73556595的博客 252
上一篇: Guass数据库实验(超详细熟悉基础操作、命令)
下一篇: Java-面向对象-包、反射
小陈又菜
博客等级 码龄3年 680粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值