静态&多态&final&权限修饰符

本文深入探讨Java中静态代码的使用原则与多态性的实现,解析静态成员、方法调用规则及final关键字的多种应用。同时,阐述了对象向上转型与向下转型的概念及其注意事项。

静态代码

1. 注意
	如果一个字符串常量和一个变量比较,通常用常量调用方法,将变量当作参数传递,防止空指针异常
	通过谁调用,谁就是this this.属性名称得一定是成员变量, 
	没有使用this.的变量,根据就近原则确定使用哪个变量
	静态方法不能调用this
	静态代码块只执行一次 		
	静态方法不建议创建对象使用,通过类名.方法名(参数)可以直接使用
2. 静态与非静态的调用
	1.静态成员可以调用静态成员
	2.非静态成员可以调用非静态成员
	3.非静态可以调用静态
	4.静态可以调用非静态,必须先创建对象,在调用

多态

代码当中体现多态性,其实就是一句话,父类引用指向子类对象。
	格式:
	父类名称 对象名 = new 子类名称();
	或者:
	接口名称 对象名 = new 实现类名称();

访问成员变量的两种方式:
	1.直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有则向上找。
	2.间接通过成员方法访问成员变量,看该方法属于谁,优先用谁,没有则向上找。

在多态代码当中,成员方法的访问规则是:
		看new的是谁,就优先用谁,没有则向上找。
		口诀:编译看左边,运行看右边。
	对比一下:
		成员变量:编译看左,运行还看左
		非静态成员方法:编译看左,运行看右边
		静态成员方法:编译看左,运行看左

向上转型一定是安全,没有问题的,正确的,但也有一个弊端:
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。


1.对象的向上转型,其实就是多态写法:
	格式: 父亲名称 对象 = new 子类名称();		      Animal animal = new Cat();
	含义:右侧创建个子类对象,把它当做父类来看待使用。  创建了一只猫,当做动物看待,没问题。
	注意事项:向上转型一定是安全的。从小范围转向了大范围,从小范围的猫,向上转换成为更大范围的动物。

	类似于:
	double num= 100; 1/正确,int --> double,自动类型转换。

2.对象的向下转型,其实是一个[还原]的动作。
	格式:子类名称 对象名= (子类名称)父类对象;
	含义:将父类对象,[还原]成为本来的子类对象。

	Animal animal = new Cat(); /本来是描,向上转型成为动物
	Cat cat = (Cat) animal; ,本来是描,已经被当做动物了,还原回来成为本来的描
	注意事项:
	a.必须保证对象本来创建的时候,就是猫,才能向下转型成为猫。
	b.如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错。ClassCastException
	类似于:  int num = (int) 10.0;//可以  int num = (int) 10.5; /不可以,精度损失


如何才能知道一个父类的引用对象,本来是一个什么子类?  instanceof
	格式:
		对象 instanceof 类名称
		这将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。
		例如:
		if(aniaml instanceof Dog){
			Dog dog = (Dog) animal;
			dog.watchHouse();
		}

final关键字代表最终,不可改变。

常见的四种用法:
1.用来修饰一个类
	格式:
	public final class 类名称{
		//...
	}
	含义:当前这个类不能有任何的子类。
	注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子)

2.用来修饰一个方法,这个方法就是最终方法,也就是不能覆盖重写
	格式:
	修饰符 final 返回值类型 方法名称(参数列表){
		//...
	}
	注意事项:对于类,方法来说,abstract与final不能同时使用,因为矛盾。

3.修饰一个局部变量
	一旦使用final关键字修饰局部变量,那么这个变量就不能进行更改。“一次赋值,终生不变”

	对于基本类型来说,不可变说的是变量当中的数据不可改变。
	对于引用类型来说,不可变说的是变量当中的地址值不可改变。
	final Student stu = new Student("高圆圆");
	stu = new Student("赵又廷");//错误,引用类型地址值不可变
	stu.setName("高圆圆圆圆");//正确


4.修饰一个成员变量
	1.成员变量具有默认值,所以使用final之后必须手动赋值。
	2.对于final的成员变量,要么使用直接赋值,要么使用构造赋值,二者选其一。
	3.必须保证类当中的所有重载的构造方法都最终会对final的成员变量进行赋值。

Java中有四种权限修饰符:

				public	  >  	protrcted  	>  	(default)  	>  	private
同一个类			YES				YES				 YES 			YES
同一个包			YES				YES				 YES 			NO
不同包子类 		YES				YES				 NO 			NO
不同包非子类  	YES				NO				 NO 			NO

注意事项:(default)并不是default关键字,而是根本不写
基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(Python&Matlab实现)内容概要:本文围绕“基于蒙特卡洛法的规模化电动车有序充放电及负荷预测”展开,结合Python和Matlab编程实现,重点研究大规模电动汽车在电网中的充放电行为建模与负荷预测方法。通过蒙特卡洛模拟技术,对电动车用户的出行规律、充电需求、接入时间与电量消耗等不确定性因素进行统计建模,进而实现有序充放电策略的优化设计与未来负荷曲线的精准预测。文中提供了完整的算法流程与代码实现,涵盖数据采样、概率分布拟合、充电负荷聚合、场景仿真及结果可视化等关键环节,有效支撑电网侧对电动车负荷的科学管理与调度决策。; 适合人群:具备一定电力系统基础知识和编程能力(Python/Matlab),从事新能源、智能电网、交通电气化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究大规模电动车接入对配电网负荷特性的影响;②设计有序充电策略以平抑负荷波动;③实现基于概率模拟的短期或长期负荷预测;④为电网规划、储能配置与需求响应提供数据支持和技术方案。; 阅读建议:建议结合文中提供的代码实例,逐步运行并理解蒙特卡洛模拟的实现逻辑,重点关注输入参数的概率分布设定与多场景仿真的聚合方法,同时可扩展加入分时电价、用户行为偏好等实际约束条件以提升模型实用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值