当前位置: 首页 > article >正文

对象的组合复用学习笔记

简单说,就是不同类的多个对象之间彼此调用对方的方法和变量,可能会多次调用,所以叫复用(重复),所有对象本身具有独立的功能(方法),共同完成一项任务的一部分,或者多个类的对象协助一个类完成一个任务。

多次调用存在 对象A 使用了对象B{b()}中的方法b(),然后方法C又使用了方法A中 通过调用方法B得到的变量或或方法,这算是一种比较难理解的。有点像俄罗斯套娃。

Circle类:

package thirdproject;

public class Circle {
   double radius,area;
   void setRadius(double r) {
	   radius = r;
   }
   double getRadius() {
	   return radius;
   }
   double getArea() {
	   area = 3.14*radius*radius;
	   return area;
   }
}

Cicular类: 

package thirdproject;

public class Circular {
Circle bottom;//定义一个Circle类型地bottom
double height;
void setBottom(Circle c) {//方法,获取底圆面积,形参是Circle类型的
    bottom = c;
}
void setHeight(double h) {//方法,获取圆锥的高
	height = h;
}
double getVolume() {//方法,计算体积
	if(bottom == null)
		return -1;//底面积没赋值,返回错误-1
	else
		return bottom.getArea()*height/3.0;//返回计算得得圆锥的体积
}
double getBottomRadius() {//返回底面圆的半径
	return bottom.getRadius();//调用Circle类的对象bottom的getRadius()方法,
}
public void setBottomRadius(double r) {
	bottom.setRadius(r);
}
}

主类: 

package thirdproject;

public class Example4_8 {
  public static void main(String []args) {
	  Circle circle = new Circle();//Java系统分配内存单元给circle
	  circle.setRadius(10);/*将10传递给r,此时形参暂时变实参,
	  *被方法调用,然后在circle的方法setRadius中,将r的 值10赋值给成员变量radius*/
	  Circular circular = new Circular();//Java系统分配内存单元给circular
	  System.out.println("circle的引用:"+circle);
	  System.out.println("圆锥bottom的引用:"+circular.bottom);//尚未赋值,因此为空null
	  circular.setHeight(5);
	  circular.setBottom(circle);//此处发生:将circle对象的引用(传值)传递给circular的bottom,注意!!传的是circle的引用
	  /*此时的circular.bottom和circle具有相同的实体radium
	   * 这里相当于把使用circlr对象下的方法和成员变量的权限给了circular的bottom*/
	  System.out.println("circle的引用:"+circle);
	  System.out.println("circular对象的变量bottom的引用:"+circular.bottom);//输出结果和上面circle一样,bottom引用的实体内容和circle引用的一样,都是实体变量radium
	  System.out.println("圆锥的体积:"+circular.getVolume());//调用circular的计算体积的方法
	  System.out.println("修改对象cirlce中的值,circular中的bottom的值也会发生变化,原因是,\ncircle和circular都是引用radium这个实体变量的哈希码,也就是地址位置等信息\n因此输出的结果都会变化");
	  circle.radius=20;
	  System.out.println("circle中的r值circle.radius="+circle.radius);
	  System.out.println("同时circular中的bottom的值circular.bottom="+circular.bottom.getRadius());
	  System.out.println("重新创建circle");
	  circle = new Circle();
	  System.out.println("circle的引用:"+circle);
	  //新创建的这个circle不影响原来被bottom引用的那个circle,原来传递的值不发生变化。
  }
}


http://www.kler.cn/a/272027.html

相关文章:

  • 99.6 金融难点通俗解释:股息率(DV)
  • 简识JVM栈帧中的操作数栈
  • vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)
  • STranslate 中文绿色版即时翻译/ OCR 工具 v1.3.1.120
  • 计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫
  • 2D 超声心动图视频到 3D 心脏形状重建的临床应用| 文献速递-医学影像人工智能进展
  • electron 学习
  • C++ 多路音频pcm混音算法
  • Web核心,HTTP,tomcat,Servlet
  • 力扣练习题2
  • 文件夹秒变应用程序?别慌,数据恢复有妙招!
  • 安装Pytorch——CPU版本
  • Rust 的 HashMap
  • 04- 人有多大胆,地有多大产 到 按需分配 - sealed JDK17
  • Python电梯楼层数字识别
  • 力扣--二叉树的最近公共祖先
  • Linux查看硬件型号详细信息
  • 在 Rust 中使用 Serde 处理json
  • 华为三层交换机:ACL的基本实验
  • 数据库基本知识
  • Kotlin:为什么创建类不能被继承
  • 88. 合并两个有序数组 (Swift版本)
  • sxf-漏洞研究员实习
  • DFL《384底丹 430万》 wf/df-udt/448/96/96/32预训练模型
  • unet各模块内容的理解(包含注意力机制、残差、以及数据维度的变化)
  • 软件杯 深度学习 python opencv 动物识别与检测