Java学习笔记(七)Java的封装继承和多态

【Java 基础】-- Java 的三大特性:封装、继承和多态 理解并掌握这三大特性,可以帮助开发者编写出更清晰、模块化和高效的 Java 代码。如果你有任何问题或见解,欢迎留言讨论!这三大特性是 Java 代码可维护性、可扩展性和重用性的关键。本文将详细介绍这三大特性,并提供示例代码帮助理解。Java 作为一门面向对象的编程语言(OOP),其核心特性包括。,从而实现代码复用的机制。在 Java 中,封装通常通过。关键字访问父类的属性和方法。在 Java 中,继承通过。Java 的三大特性——是面向对象编程的核心。 阅读详情

1. 封装:隐藏对象的属性和实现细节,仅对外公开接口。

(1)private(私有变量):只能被定义它的类访问。

(2)protected(受保护变量):可以被定义它的类及子孙类直接访问,也可以由同一包中的其他类直接访问。

(3)public(公共变量):可以被任何类进行访问。

(4)package:可以被定义它的类和同一个包中的其他类(包括派生子类)所访问.(包变量在声明时常常省略package关键字),在其他包中的子类则不能访问父类的包变量

/*
public class Singleton {
	//静态的,保留自身的引用
	private static Singleton test = new Singleton();
	
	//必须是私有的构造函数
	private Singleton(){
		
	}
	//公共的静态方法
	public static Singleton getInstance(){
		return test;
	}
}
*/
public class Singleton {
	//静态的,保留自身的引用
	private static Singleton test = null;
	private int size = 512;
	//必须是私有的构造函数
	private Singleton(){
		
	}
	//公共的静态方法
	public static Singleton getInstance(){
		if(test == null){
			test = new Singleton();
		}
		return test;
	}
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		this.size = size;
	}
	
	public static void main(String[] args) {
		Singleton[] singleInstance = new Singleton[5];
		//使用内存中的同一个实例,因此结果均为512
		for(int i=0;i<5;i++){
			singleInstance[i] = Singleton.getInstance();//静态方法直接可以类名.方法
			System.out.println(singleInstance[i].getSize());
		}
		singleInstance[4].setSize(1000);
		for(int i=0;i<5;i++){
			System.out.println(singleInstance[i].getSize());
		}
	}
}
运行结果为:

512
512
512
512
512
1000
1000
1000
1000
1000

2. 继承:

(1)复用其他对象的代码有两种方法:

①. 继承:是由子对象完全继承父对象的数据和操作,"is"的关系。

②. 包含:把一个对象作为另外一个对象的一部分,从而达到复用的目的,"has"的关系。

(2)继承的理解:

①. 继承是类实现可重用性和可扩充性的关键特征,在继承关系下类之间组成网状的层次结构。

②. 继承避免公用代码的重复开发,减少代码的冗余。

③. 通过继承增强一致性,从而减少模块间的接口和界面

(3)单继承(Java支持):子类只能有一个直接父类,多继承(Java不支持):子类可以有多个直接父类。

Java不支持类的多继承,但支持接口的多继承。继承通过关键字extends实现。

构建一个Person类:

public class Person {
	protected String name;
	protected char sex;
	protected int age;
	
	public Person(){
		super();//表示对它的直接父类的构造函数的使用
		System.out.println("父类的构造函数");
	}

	public Person(String name, char sex, int age) {
		//super();
		this.name = name;//this加“.”表示获取本类的使用
		this.sex = sex;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	//添加方法
	public String getDetails(){
		return "这个人是:"+this.name;
	}
}

构造一个继承Person的Student类:

public class Student extends Person{//新增添了两个变量
<span style="white-space:pre">	</span>protected int chinese,math;
	
	public Student(){
		super();//调用父类无参构造函数
		System.out.println("Student类构造函数");
	}
	
	public Student(String name, char sex,int age,int chinese,int math){
		//super(name,sex,age);
		super.name = name;	//通过super调用父类成员变量
		super.sex = sex;
		super.age = age;
		
		this.chinese = chinese;
		this.math = math;
	}
	
	public double average(){
		return (this.chinese+this.math)/2.0;
	}
	
	//方法覆盖
	public String getDetails(){
		return "这个人是:"+this.name+",平均分是:"+this.average();
	}
}


(4)变量隐藏:

在子类对父类的继承中,如果子类与父类的成员变量同名,此时成为子类隐藏(override)了父类的成员变量。子类若要引用父类的同名变量,要用super关键字做前缀加圆点操作符引用,即“super.变量名”。

(5)方法覆盖:

在子类中重写父类的方法,它们的名称,参数以及返回类型完全相同。通过改写方法体来完成不同的功能。注意子类方法不能缩小父类方法的访问权限 。

(6)super关键字:

如果子类调用父类的构造函数,则通过super()调用来实现。

如果子类调用父类的同名方法,则通过super.方法名()来实现。

(7)this关键字:this变量代表对象本身

当类中有两个同名变量,一个属于类的成员变量,而另一个属于某个特定的方法,使用this区分成员变量和局部变量,使用this简化构造函数的调用

引用自身对象的成员变量,引用自身对象的成员方法,调用自身的构造方法--this(参数)


3. Java多态

(1)静态多态:在编译时,就可以被系统识别,也称为静态联编,重载(overload)方法采用静态联编的方法实现方法重载,在一个类中定义多个同名的方法,但这些方法的参数列表必须不一样,即参数的个数不同,或参数类型不同,或参数顺序不同,注意返回类型不能用来区分重载。

(2)动态多态:在编译时不能被系统识别,而是在运行时才被系统识别,也称为动态联编,覆盖(override)方法,抽象方法和接口采用动态联编的方法实现

class sup{//定义一个sup类
	public int x,y;
	sup(int a,int b){
		this.x = a;
		this.y = b;
	}
	
	public void  display(){
		int z = this.x+this.y;
		System.out.println("add="+z);
	}
}

class sub extends sup{//定义的sub类继承sup
	sub(int a,int b){
		super(a,b);//调用父类sup的构造函数
	}
	
	public void  display(){//方法覆盖
		int z = this.x * this.y;
		System.out.println("product="+z);
	}
}

//dispaly在编译时不能被系统识别,而是在运行时才能被识别到
public class ResultDemo extends sub{//ResultDemo继承sub类
	ResultDemo(int x,int y){
		super(x,y);//调用父类sub的构造函数
	}
	
	public static void main(String[] args) {
		sup num1 = new sup(7, 14);
		sub num2 = new sub(7, 14);
		ResultDemo num3 = new ResultDemo(7, 14);
		num1.display();
		num2.display();
		num3.display();
		
		//动态联编运行时会检查num1的内存是sub的实例还是sup的实例
		num1 = num2;
		num1.display();
		
		num1 = num3;
		num1.display();
	}
}

执行结果为:

add=21
product=98
product=98
product=98
product=98

(3)父类和子类对象的转换

①. 自动转换:向上映射都是自动转换

②. 强制类型转换:父类对象转换为子类对象


格式:instanceof 判断前面的对象是否为后面的类的实例

if(父类对象名 instanceof 子类名){

    子类对象名 = (子类名)父类对象名;

}else{

    …

}

class ASuper{
	String s = "calss:A";
}
class BSub extends ASuper{//继承关系
	String s = "class:B";	//变量隐藏
}
public class TypeV {
	public static void main(String[] args) {
		BSub b1,b3;
		ASuper a1,a2,a3;
		
		BSub b2 = new BSub();
		a1 = b2;//向上映射
		a2 = b2;//向上映射
		System.out.println(a1.s);
		System.out.println(a2.s);
		
		b1 = (BSub)a1;//向下映射,静态联编
		System.out.println(b1.s);
		
		a3 = new ASuper();
		//b3 = (BSub)a3;
		
		if(a3 instanceof BSub)
			b2 = (BSub)a3;
		else
			System.out.println("can not be transformed");
	}
}

运行结果 :

calss:A
calss:A
class:B
can not be transformed



封装继承多态 多态意味着“多种形态”,同一个接口或引用可以指向不同类型的对象,使用父类型的对象作为参数,可以接收所有子类对象(这里父类引用具有多种形态)。在运行时根据实际对象类型调用相应的方法。多态分为两种形式,方法重载是编译时多态的例子(静态绑定),而方法重写则是运行时多态的体现(动态绑定)--方法重载是一个类的多态性表现而方法重写是子类与父类的一种多态性表现向上转型实际就是创建一个子类对象,将其当成父类对象来使用。从小范围向大范围的转换语法格式:父类类型 对象名= new子类类型()使用出现的场景。 阅读详情

相关推荐

【OpenCV】背景替换(opencv、python),照片、证件照的背景替换(抠图)

目录步骤:导入库1、读入将要抠图的图片2、create一个带颜色域的mask3、通过mask使得原图只显示汽车,即抠出所需要的部分4、将要替换掉的图像resize或裁剪到和上述图片一样的大小5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)6、通过和运算使得两部分图片mask部分替换7、最后保存图片 步骤: 导入库 import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np imp

weixin_41729258的博客 4362

java sub函数,请问一下这个Sub子过程与Function函数过程有什么区别?

function是函数,sub是子程序,都可以传递参数,但函数有返回值,子程序没有function 可以用自身名字返回一个值,sub 需定义别的变量,用传址方式传回值。Sub 过程与Function 过程的区别:1. Sub 过程定义时无需定义返回值类型,而Function 过程一般需要用“As 数据类型” 定义函数返回值类型。2. Sub 过程中没有对过程名赋值的语句,而Function 过程中...

weixin_32463071的博客 930

英飞凌TC397芯片时钟树详解:从EB-tresos配置到PLL锁相环实战避坑

本文详细解析了英飞凌TC397芯片的时钟树架构,从EB-tresos配置到PLL锁相环的实战应用,帮助工程师避免常见配置陷阱。文章深入探讨了时钟源层、频率转换层和分配网络层的设计原理,提供了PLL配置的数学公式和EB-tresos关键容器的配置要点,并分享了调试技巧与性能优化实践,适用于MCU开发中的时钟管理需求。

weixin_42524226的博客 212

java 数组 sub_如何在Java中从另一个数组创建子数组?

如何从另一个数组创建子数组?是否有方法从第一个数组中获取索引,例如:methodName(object array, int start, int end)我不想重复制造循环和使我的程序受到影响。我不断出错:0这是我的代码:import java.util.*;public class testing{public static void main(String [] arg){int[] src...

weixin_28914101的博客 2112

豆包大模型API调用两种方法

ps: 因为是自用,所以这里图方便采用硬编码密钥的形式;如果有需求/安全风险,建议参考官方教程设置ARK_API_KEY环境变量的方式。坏处是:看别人的教程走了一大圈弯路hh;基础调用的话方法一就可以满足了,也比较方便快捷,容易上手。将 <Model> 替换为 Endpoint ID即可。创建就按照提示填写信息就行,需要实名认证,有免费额度。绿框框里就是Endpoint ID。

kkkkkkkkkasey的博客 1万+

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办...

Ck_Max的博客 5767

java sub_java实现Pub/Sub

jedis 实现Pub/Subredis支持的Pub/Sub消息模式,类似JMS的“topic” 功能,但是这些消息不支持持久化,而且redis的订阅端需要独占链接,消息接收将是阻塞的。Redis 的消息即发即失,sever不会保存消息,如果publish 的消息没有任何client 处于subscribe状态,消息将会丢失,如果client在subscribe时,链接断开后重连,消息将会丢失。j...

weixin_39595320的博客 1810

基于YOLOv8深度学习的夜视行人检测系统:UI界面 + YOLOv8 + 数据集的实现

为了解决这一问题,基于深度学习的行人检测技术,尤其是YOLO(You Only Look Once)系列算法,成为了一个有效的解决方案。本文将详细介绍如何构建一个夜视行人检测系统,利用YOLOv8模型实现高效的行人检测,并设计用户友好的界面以便于使用。本博客详细介绍了如何构建一个基于深度学习的夜视行人检测系统,包括数据准备、YOLOv8模型训练、用户界面设计和实时监控模块的实现。为了将数据集转换为YOLO格式,我们需要确保每个图像文件都有一个对应的标签文件,标签文件中包含行人的边界框信息。

YOLO 1172

java中的substring()方法

substring  public String substring(int begin,int end)   返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的begin处开始,直到索引end - 1处,因此,该  子字符串的长度为end - begin(字符串是从0开始的)  "hamburger".substring(4,8)  return "urge"  "smil

每天进步一点点 8203

30天入门 SAP BTP 开发系列之三:了解 SAP BTP Global Account 的概念

90天之后 Trial 账号会被删除,该账号在 SAP BTP 上创建的内容会被清空,不过我们可以再创建一个新的 Tria 账号。本文简单介绍了 SAP BTP 里 Global Account 的概念,下一篇文章我会介绍 SAP BTP 控制台里和 Global Account 相关的一些操作。,创建 SAP BTP 的 Trial,在可选 Region 列表里,在两个可选项中二选一,选择了。或订阅合同时,SAP BTP 会在后台为其生成一个对应的。在企业拥抱云原生架构的过程中,SAP BTP 的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 999

(十一)随机性与独立性回顾

随机性与独立性回顾

旺旺的碎冰冰~的博客 1017

Java 学习笔记·七 —— Java 基础语法·面向对象之封装、多态、继承

面向对象 类与对象 类的生命周期 类的定义与使用 封装、继承、多态

un357951的博客 355

CS 188 Project3(RL) Q10:Approximate Q-Learning

实现一个近似的Q-learning学习代理,它学习状态特征的权重,其中许多状态可能共享相同的特征。在qlearningAgents.py中的ApproximateQAgent类中编写实现,它是PacmanQAgent的子类。 注:近似Q-learning学习假设在状态和动作对上存在一个特征函数f(s,a),它产生一个向量f1(s,a) .. fi(s,a) .. fn(s,a)特征值。我们在fe...

大模型与Agent智能体 2655

Java学习笔记(封装,继承,多态,抽象类,接口)七

封装 1.提高了程序的安全性,保护数据 2.隐藏代码的视线细节 3.统一接口 4.系统可维护性增加

u012028498的专栏 203

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 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中的封装,继承和多态(详解)

目录封装继承 封装 所谓的封装就是把类的属性和方法使用private修饰,不允许类的调用者直接访问,我们定义如下一个类,可以看到所有的成员变量和成员方法都使用private修饰了,我们现在来使用一下这个类。 当我们使用的时候编译器给出了下面这样的报错。 告诉我们说是private访问控制,那么这是什么意思呢?我们来看看另外一张图,那么这张图代表这什么呢?在看这张图之前,我们先来看看四者都提到的包,那么包又是什么呢,包可以简单理解为一个文件夹,把类放到放到包里面,也就相当于是专门的文件夹里面,这不是我们说的

JunFengYiHan的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java系列——封装、继承、多态初了解

封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。将类的某些信息隐藏在类的内部,不允许外部程序进行直接的访问调用。通过该类提供的方法来实现对隐藏信息的操作和访问。隐藏对象的信息。留出访问的对外接口。​ 举个比较通俗的例子,比如我们的USB接口。如果我们需要外设且只需要将设备接入USB接口中,而内部是如何工作的,对于使用者来说并不重要。而USB接口就是对外提供的访问接口。

wct040923的博客 1万+

java的封装继承和多态

this在每个类的内部,都有一个隐含的成员变量,该类的类型就是该类的类型,该成员变量的名称是this,this是一个引用,指向自身的对象。this的用法:         1、this调用本类中的属性,也就是类中的成员变量         2、this调用本类中的其他方法         3、this调用本类中的其他构造方法,调用时要放在构造方法的首行面向对象特征之封装(Encapsulation...

dragon901的博客 1万+

封装、继承、多态

面向对象编程(Object-Oriented Programming, OOP)的三大特征是封装、继承和多态,它们共同构成了面向对象编程的基本原则,有助于编写模块化、可维护和可扩展的代码。

m0_74064480的博客 5240

java封装继承多态

java封装继承多态 面向对象 面向对象的三个特征: 封装(Encapsulation); 继承(Inheritance); 多态(Polymorphism)。 我的总结: 面向过程:强调的是具体的功能实现;(执行者) 面向对象:强调的是具备功能的对象。(管理者) 2、类 类(class)是Java 语言的最小编程单位,也是设计和实现Java 程序的基础,本部分将深入介绍类的相关知识。 类的概...

阿龙Growing的博客 2796

封装、继承和多态

封装就是对类内部的实现细节进行隐藏,然后对类外提供公开的接口。继承其实是父类对子类的共性的抽取, 实现代码的复用。一个引用调用同一个方法,因为这个引用 引用的对象不一样,导致调用这个方法,所表现出来的行为不一样。这种思想就叫做多态。 ...

crazy_xieyi的博客 2468

封装 继承和多态

封装继承和多态 封装 我们在设计程序时,讲究六个字,高内聚,低耦合 封装就是我们对数据进行隐藏,多用于来封装属性,封装方法较少。 记住封装的核心,就是私有(private) 令属性为私有后我们调用不了类里面的属性,所以我们设置一些get方法和set方法来操作私有的属性 get方法,set方法 public int getAge(){ return age; } public void setAge(int age){ this.age = age; } 具体代码应用 设置一个学生类,令其定义的属

weixin_48121041的博客 5450

java之封装,继承,多态

一,前言 ​ 今天总结一下关于Java的三大特性,封装,继承,多态。其实关于三大特性对于从事编程人员来说都是基本的了,毕竟只要接触Java这些都是先要认识的,接下来就系统总结一下。 二,封装 ​ 先来说说特性之一:封装 2.1,什么是封装 ​ 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。 将类的某些信息隐藏在类的内部,不允许外部程序进行直接的访问调用。 通过该类提供的方法来实现对隐藏信息的操作

qq_42514371的博客 5411

Java 封装、继承、多态的理解

更好的阅读体验:Java封装、继承、多态的理解 1.封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。让使用者知道的才暴露出来,不需要让使用者知道的全部隐藏起来 封装的好处:避免使用者直接操作属性值,隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作,提高程序安全性。 1.1.封装的实现 Java是使用“访问控制符”来控制哪些细节需要封装的,哪些细节需要暴露的。 Java中有4种访问控制符,分别为private,defaul.

持 开源思想,撰 必胜所学,望 勤学者,无难处 5954

C++之对封装、继承、多态的理解

对封装、继承、多态的简单认识和理解。

爱喝橙汁儿的博客 3807

七:Java之封装、抽象、多态和继承

本文章介绍了关于Java中的面向对象封装、抽象、继承、多态特点 Java面向对象主要有四大特性:封装、抽象、继承和多态。

恰同学少年 7359
上一篇: Java学习笔记(六)static关键字
下一篇: Java学习笔记(八)abstract,final,变量及接口
mengrennwpu
博客等级 码龄15年 262粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengrennwpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值