java多态讲解

最详细讲解Java多态 多态是Java面向对象编程的核心特性之一,通过父类引用指向子类对象,实现"同一方法调用,不同对象执行不同行为"。实现多态需要满足三个条件:继承关系、方法重写和向上转型。多态分为编译时类型(静态绑定)和运行时类型(动态绑定),提供代码可扩展性、降低耦合度,符合"开闭原则"。通过父类接口统一管理不同子类对象,使系统更灵活、可维护。多态是构建健壮软件系统的重要基础。 阅读详情

JAVA多态

一、相关的类结构

class A ...{  //create by danielinbiti
         public String show(D obj)...{  
                return ("A and D");  
         }   
         public String show(A obj)...{  
                return ("A and A");  
         }   
}   
class B extends A...{  
         public String show(B obj)...{  
                return ("B and B");  
         }  
         public String show(A obj)...{  
                return ("B and A");  
         }   
}  
class C extends B...{}  																
class D extends B...{}

二、测试运行

        A a1 = new A();  
        A a2 = new B();  
        B b = new B();  
        C c = new C();   
        D d = new D();   
        System.out.println(a1.show(b));   ①  
        System.out.println(a1.show(c));   ②  
        System.out.println(a1.show(d));   ③  
        System.out.println(a2.show(b));   ④  
        System.out.println(a2.show(c));   ⑤  
        System.out.println(a2.show(d));   ⑥  
        System.out.println(b.show(b));    ⑦  
        System.out.println(b.show(c));    ⑧  
        System.out.println(b.show(d));    ⑨
三、运行结果

①   A and A
②   A and A
③   A and D
④   B and A
⑤   B and A
⑥   A and D
⑦   B and B
⑧   B and B
⑨   A and D

四、总结

以A a2=new B()为例。

1、a2只能访问A的信息(指的是编译期编译器只知道a2是A类型,不知道a2具体子类对象,只有运行期才知道指向什么对象),而子类重写的方法,父类中也存在,即B重写的方法,A里也有(如果B里有但是A里没有的方法,a2也不能直接调用),所以a2可以访问,但是调用的时候(注意这里指的是运行期),a2实际指向的是B对象,所以调用的是B对象的同名同类型参数方法。所以a2.show(b)调用的是show(A obj),因为A引用不到show(B obj)。

注:编译期是编译器检查语法和类型,运行期是解析器解析伪代码为机器指令而执行,编译期编译器会检查a2的访问范围,也就是a2的访问不超过A的信息就不会出错,运行期解析器会解析方法的代码指令。

JavaShow 用来把大篇幅的网页源码或字符串数据转换为程序可以直接用的格式例如Response.Write($)Print($)Document.Write($)这样的工具大家应该也有人用过,我也下载过,不过感觉有些地方用的有些不顺手于是自己做了一个,特别加了两个功能showmsg($)就是用自定义函数showmsg处理字符串$,其中SHOWMSG可以用户自定义输入变量:str=str & $把所有数据赋值到一个变量中 立即下载

相关推荐

Mendix 开发实践指南|Mendix平台概览

低代码开发是一种将编码从文本形式转变为视觉形式的应用开发方法。它提供了一个模型驱动的、拖放式的界面,而不是传统的编码环境,使得各种技能水平的开发者——包括专业开发人员、新手、主题专家、业务利益相关者和决策者——都能使用低代码工具来构建驱动价值的企业业务应用。低代码的核心在于提高开发的可访问性和效率,让更多人能够参与到应用开发中来​​。Mendix适用于多种应用场景,包括企业级应用、移动应用、物联网(IoT)应用和微服务架构等。

多年搬砖的经验分享... 4413

java 多态练习

题目: package arithmetic; public class duotai { class A { public String show(D obj) { return ("A and D"); } public String show(A obj) { return ("A and A"); } } class B extends A { // B可以重写A public String show(B obj) { return (

violin_520的博客 358

【STM32】STM32F407实现简单的Modbus协议

1.ModBus协议简介 MODBUS协议是一种串行通信协议,由Modicon公司(施耐德公司前身)发表,由于其公开发表且无版权要求,易于部署和维护,在工业界广泛应用。MODBUS采用主从通信(Master/Slave),MODBUS有三种报文格式:ASCII、RTU、TCP,本文主要讨论RTU。 如下图所示,串行通信上的MODBUS协议主要由地址,功能码,数据,CRC校验四部分数据帧构成。主机和从机的串行通信设备要求一致,参数要求一致,即假设使用串口,主从机波特率,奇偶校验...

BadBoyHolly的博客 8188

Java多态详解

目录1. 基本介绍1.1 多态的概念1.2 对象的多态1.3 入门案例2. 具体细节2.1 向上转型2.2 向下转型2.3 instanceOf 比较操作符3. 实现技术:动态绑定4. 应用4.1 多态数组4.2 多态参数5. 多态的优点 1. 基本介绍 1.1 多态的概念 多态是继封装、继承之后,面向对象的第三大特性。 多态体现为父类引用变量可以指向具体的子类对象。 1.2 对象的多态 1.3 入门案例 2. 具体细节 2.1 向上转型 2.2 向下转型 2.3 instanceOf 比较操作符 3. 实

m0_67599274的博客 3万+

基础知识学习 -- qnx 系统

qnx os车载系统

求变,从思想开始 3877

FPGA实现Gardner环定时同步:Verilog代码与Testbench实战解析

本文深入解析了在FPGA上实现Gardner环定时同步的完整过程,详细阐述了其非数据辅助的定时误差检测原理。通过Verilog代码实战,展示了内插滤波器、定时误差检测器、环路滤波器和数控振荡器等核心模块的设计,并提供了完整的Testbench验证方法,帮助开发者解决数字通信系统中的时钟同步难题。

gpt4scribbler的博客 577

java show函数_java show()函数

importjava.awt.*;importjavax.swing.*;importjava.util.*;publicclassHeadLineextendsJFrame{HeadLinePanelnews=newHeadLinePanel();publicHeadLine(){super("HeadLines");setSize(4...import java.awt.*;import ja...

weixin_42393245的博客 4359

Fluent VOF造波从入门到放弃?手把手教你用k-w SST模型搞定波浪模拟

本文详细介绍了使用Fluent VOF和k-w SST模型进行波浪模拟的实战技巧,从参数设置到结果优化,帮助用户避开常见误区。通过工业项目验证的配置方案,提升波浪模拟的准确性和计算效率,特别适合处理多相流和复杂湍流场景。

weixin_27102543的博客 422

Java学习笔记(十一)

Java的第十一篇笔记,介绍了Java的继承

m0_71007572的博客 4341

手把手教你用C#实现TwinCAT 3 ADS通讯(附完整代码示例)

本文详细解析了如何使用C#实现TwinCAT 3 ADS通讯,包括协议核心价值、开发环境配置、变量通信实践及高级应用场景。通过完整代码示例和性能优化技巧,帮助开发者高效实现工业自动化系统中的实时数据交换,特别适合倍福(Beckhoff)平台用户。

weixin_29230901的博客 117

一、两电平IGBT整流器

电压源换流器(Voltage source converter,VSC)连接交流主网和直流电网,起到交直流网络连接、功率输送和电能变换的作用。采用电压控制手段可维持直流电压的稳定;或采用功率控制手段保证系统功率输出达到预期。VSC的三相电压平衡方程如式(1)所示:式中,igx和ugx分别表示主网三相电流与电压(x=a,b,c);ucx表示换流器VSC 交流输出电压;Rg表示交流主网等效电阻;Lg表示交流主网等效电感。

TUCHACHINA的博客 4165

重启程序猿之《Java 多态深度讲解》

java多态理论知识讲解和案例分析

qq_24917653的博客 1142

QGIS004:【05矢量属性表】-保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段

摘要:QGIS矢量属性表工具箱包括保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段等选项,本文介绍各选项的基本操作。

qq_31762031的博客 2312

Java 多态讲解

一、多态实现条件在java中要实现多态,必须要满足如下几个条件,缺一不可: 1.必须在继承体系下 2.子类必须要对父类中方法进行重写 3.通过父类的引用调用重写的方法

2303_76875404的博客 926

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 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中多态讲解

1.多态的概述 多态概述:在同一时刻体现出事物的不同状态 (如:水(气态、固态、液态)) 在面向对象Java语言中、多态的前提条件: 1)必须有继承关系,如果没有继承关系,无意义 2)必须有方法重写,在继承关系中,父类比较抽象(动物类), 动物类 eat(){...} 子类: 狗类, eat("狗吃骨头!!"){} 猫类 eat("猫吃鱼!!"){} 3)必须父类引用指向子类对象(向上转型) ; 格式:

阿杨洋的博客 206

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java中的多态_Java中的多态的详细讲解

多态:同一个符号在不同语义环境下具有不同的解释一、多态是通过1、接口和实现接口并覆盖接口中同一个方法的几种不同的类体现的。2、父类和继承父类并覆盖父类中同一方法的几个不同子类实现的。二、基本概念多态性:发送消息给某个对象,让该对象自己决定响应何种行为。通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。java的这种机制遵循一个原则:当超类对象引用子类对象时,被引用对象的类型而不是引用变量...

weixin_32743475的博客 179

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java多态经典讲解,Java入门超经典教程-多态

1.1. 多态(掌握)多态时面向对象三大特征:封装、继承、多态。在继承关系,是一种”is A”的关系,也就说子类是父类的一种特殊情况,有如下代码:public class Animal{}public class Dog extends Animal{}public class Cat extends Animal{}那么我们可以认为狗和猫都是一种特殊的动物,那么可以使用动物类型类来表示狗或猫。D...

weixin_42519733的博客 230

java多态经典讲解_Java 多态讲解

什么是多态?多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。继承在为多态的实现做了准备。子类继承父类,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类对象,也可以处理子类对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。即多态性就是相同的消息使得不同的类做出...

weixin_29686935的博客 193

Java多态深度讲解

在java中要实现多态,必须要满足如下几个条件,缺一不可1. 必须在继承体系下。2. 子类必须要对父类中方法进行重写。3. 通过父类的引用调用重写的方法 多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。静态绑定:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代 表函数重载。动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体 调用那个类的方法。

2302_80113478的博客 954

JAVA多态(超详细讲解)

目录 多态的基本介绍: 实现多态的条件: 1.继承:必须要有子类继承父类的继承关系。 2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。 3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。 JAVA面向对象编程有三大特性:封装、继承、多态。 在我们学习了继承后,我们将继续学习多态。 多态的基本介绍: 这里引用下其他地方的解释。 所谓多态就是指程序中定义的引用变量所指向的具体类型.

m0_56107268的博客 5万+

JAVA中多态以及向上转型向下转型、重写的讲解

对多态、、向上、向下转型,以及重写的解释

Green_756的博客 3604

一文讲解——Java多态

多态的词组字面意思是: 某种事物多种形态。但是对于我们学习Java 的程序原来说,就不不能简单这样来理解了。多态是 完成某个行为,不同的对象去实现会有不同的效果。现在还看不懂其实没关系,也就简单提一嘴。举个栗子:有一天,学校二食堂做了一大盘深海大闸蟹,你和小帅同时在排队。此时一位长得very beautiful 的女生——小美来了,到窗口看了一下菜,感觉不错,也想吃。但是排队的人太多了,就想插下队。你一看,我丢想插队,门都没有,表现出不肯的样子。

m0_74100417的博客 1192

java多态的讲解

多态具备的三个条件: 1.继承 2.重写 3.向上转型,父类的对象保存子类的实例,父类的引用指向子类的对象 多态的基础语法: 1.学习多态基础语法之前,我们需要普及两个概念: 第一个:向上转型 子----->父(比喻:自动类型转型) 父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat(); 第二个:向下转型 父------>子(比喻:强制类型转换,需要加强制类型转换符) 子类类型 变量名 = (子类类...

weixin_51755941的博客 551

java多态讲解例子_Java 多态 ——一个案例 彻底搞懂它

最近,发现基础真的很重要。比如,Java中多态的特性,在学习中就是很难懂,比较抽象的概念。学的时候就犯糊涂,但日后会发现,基础在日常工作的理解中占有重要的角色。下面,我将用一个代码实例,回忆和巩固多态的概念和存在的意义。理解多态,是面向对象编程的重要一步。先来个热身,看下图在mian函数调用的时候,1和2的不同。2就是用了多态的思维,这是最最简单的小栗子。an相当于一个引用(类型),但是它可以代表...

weixin_39914825的博客 235
上一篇: RHadoop的技术性文章
下一篇: ECharts使用
danielinbiti
博客等级 码龄24年 610粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值