java学习-初级入门-面向对象④-类与对象-类与对象的定义和使用2
我们继续学习类与对象,上一篇我们定义了 坐标类(Point),
这次我们在Point的基础上,创建一个圆类(Circle).
案例:创建一个圆类
题目要求:
计算圆的周长和面积;求判断两个圆的位置关系,①两圆外离 d>R+r ②两圆外切 d=R+r
③两圆相交 R-r<d<R+r(R>r) ④两圆内切 d=R-r(R>r) ⑤两圆内含d<R-r(R>r)
解题思路:
1.圆的属性:圆心(用一个坐标来表示),半径
2.计算周长函数 perimeter
3.计算面积函数 area
4.判断两个圆的位置关系
5.进行测试
代码设计:
Point类(上次我们有一个测试函数,去掉or不去掉都可以,测试函数跟我们这次案例无关,但也不影响运行)
public class Point {
private double x; //成员变量
private double y; /**
* 初始化方法
* @param x 横坐标
* @param y 纵坐标
*/
public void init(double x,double y){
this.x = x;
this.y = y;
} /**
* @param p 计算距离的两个点之一(因为这个类自己本身就是一个坐标,所以调用 类自己的距离函数 的时候,只需要加入要比较的坐标即可)
* @return 距离
*/
public double distance(Point p){
return Math.sqrt(Math.pow((p.x-this.x),2)+Math.pow((p.y-this.y),2)); // 当前对象 p1.distance(p2)) this 表示的是 p1
} }
圆类(Circle)(这个类里面有三个构造函数,构造函数的使用,是根据参数的不同)
构造函数,就是在新建一个对象时(即new一个对象的时候)直接赋值。
第一个构造函数没有参数
第二个构造函数 三个参数 r x y
第三个构造函数 两个参数 p(坐标) r(半径),这个构造函数在调用的时候就需要,把p坐标初始化(即坐标的初始化函数init())
其余的函数比较普通。
判断圆的位置关系时我们返回的byte值,在测试函数中根据返回值 来确定位置关系:1-外离 2-外切 3-相交 4-内切 5-内离
public class Circle {
private double r;
private Point p;// 圆心 /**
* 构造函数1,无参,直接进行赋值
*/
public Circle() {
p = new Point();
p.init(3,4);
r = 1;
System.out.println("第一个构造函数被自动调用了");
} /**
* 构造函数2,三个参数
* @param r 初始化半径r
* @param x 初始化横坐标x
* @param y 初始化纵坐标y
*/
public Circle(double r, double x,double y){
Point p = new Point();
p.init(x,y);
this.p = p;
this.r = r;
System.out.println("第二个构造函数被自动调用了");
} /**
* 构造函数(constructor)
* @param p 定义一个坐标
* @param r 初始化半径
*/
public Circle(Point p, double r){
this.p = p;
this.r = r;
System.out.println("第三个函数被调用了!");
} /**
* 求面积
* @return 返回面积
*/
public double area( ){
return Math.PI*r*r;
} /**
* 求周长
* @return 返回周长
*/
public double perimeter( ){
return Math.PI*r*2;
} /**
* 判断当前圆与另一个圆的位置关系。 1-外离 2-外切 3-相交 4-内切 5-内离
* @param circle
* @return
*/
public byte position(Circle circle){
double dis = this.p.distance(circle.p); // 两个圆心的距离
double sumOfR = this.r + circle.r; // 半径和的距离
double subOfR = Math.abs(this.r-circle.r); if (dis>sumOfR){
return 1;
}
if (Math.abs(sumOfR-dis)<1e-6) {
return 2;
}
if (dis>subOfR&&dis<sumOfR){
return 3;
}
if (Math.abs(dis-subOfR)<1e-6){
return 4;
}
if (dis <subOfR){
return 5;
}
return 0;
}
}
测试类 Test 进行测试(大家可以更改数据进行测试)
public class Test {
public static void main(String[] args) {
// c1我们在Circle中设置为: 半径 1, 圆心(3,4)
Circle c1 = new Circle(); // 调用第一种无参构造函数 //c2我们设置为: 圆心(0,0),半径为4
Circle c2 = new Circle(4,0,0);//调用第二种构造函数,三个参数 r x y //c3我们设置为 圆心(0,0) 半径为6
Point p = new Point(); // 调用第三种 ,两个参数 p r
p.init(0,0);
Circle c3 = new Circle(p,6); System.out.println("c1的周长是: "+c1.perimeter());
System.out.println("c1的面积是: "+c1.area()); System.out.println("c2的周长是: "+c2.perimeter());
System.out.println("c2的面积是: "+c2.area()); String str ;
switch (c1.position(c2)){
case 1:
str = "外离 ";
break;
case 2:
str = "外切" ;
break;
case 3:
str = "相交";
break;
case 4:
str = "内切";
break;
case 5:
str = "内含";
break;
default:
str = " 0.0 ";
}
System.out.printf("两个圆的位置关系为%s :",str);
System.out.println();
}
}
测试结果:
收获总结:因为我们在Point类里面的初始化不是用的构造函数,在Circle类的构造函数要不断的 创建一个坐标(Point)对象(即new 一个Point)
所以我决定我把Point的 初始化方法 init() 也改为 构造函数。
Point类 修改如下:
把函数init 的函数名换位 Point(即类名) Ciecle类修改如下:(修改了构造函数1,和构造函数2,修改后的代码如下)
/**
* 构造函数1,无参,直接进行赋值
*/
public Circle() {
Point p = new Point(3,4);
this.p = p;
r = 1;
System.out.println("第一个构造函数被自动调用了");
} /**
* 构造函数2,三个参数
* @param r 初始化半径r
* @param x 初始化横坐标x
* @param y 初始化纵坐标y
*/
public Circle(double r, double x,double y){
Point p = new Point(x,y);
this.p = p;
this.r = r;
System.out.println("第二个构造函数被自动调用了");
}
Test函数因为 构造函数发生了改变,也随之发生了改变;
//c3我们设置为 圆心(0,0) 半径为6
Point p = new Point(0,0); // 调用第三种 ,两个参数 p r
Circle c3 = new Circle(p,6);
构造函数,就是在新建一个对象时(即new一个对象的时候)直接赋值。
java学习-初级入门-面向对象④-类与对象-类与对象的定义和使用2的更多相关文章
- java学习-初级入门-面向对象③-类与对象-类与对象的定义和使用1
今天学习类与对象.先大致解释一下类与对象的含义. 对象:object 有物体这一概念,一切皆对象(物体),对象由静态的属性和动态的行为组成. 比如说水杯: 水杯的静态属性:材质,容量,质量,颜色 动态 ...
- java学习-初级入门-面向对象②-面向对象概述-面向对象程序设计
我们在 面向对象①中学习了,结构化程序设计. 今天我们一起学习面向对象程序设计. 学习面向对象程序设计就要了解,在面向对象中重要的知识点. 继承 . 多态 . 抽象 . 接口 我们会在接下 ...
- java学习-初级入门-面向对象⑤-类与对象-类与对象的定义和使用3
这次我们要做一个日期类Date类 主要目的是 1. 熟悉-->构造不同参数的函数 2.善于利用已有的函数!! 题目要求: Date类要求 可设定年月日 可转换为字符串,并可指定分隔符, ...
- java学习-初级入门-面向对象⑥-类与对象-静态static
这次我们来学习静态(static) 知识点 1.静态方法只能调用静态变量 2.静态变量属于整个Class,会随着发生变化. 案例:定义一个自动增长的学生类. 题目要求: 定义一个学生类,除了姓名.性别 ...
- java学习-初级入门-面向对象①-面向对象概述-结构化程序设计
为了学习面向对象程序设计,今天我们先利用面向对象以前的知识,设计一个学生类. 要求进行结构化程序设计. 学生类: Student 要求:存储学生的基本信息(姓名.性别.学历层次和年级),实现学生信息的 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法
面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- Java精选笔记_面向对象(慨念、类和对象)
面向对象概念 在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象. 相对于面向过程而言.是一种思想,强调的是功能的对象. 面向对象的本质:以类的方式组织代码, ...
随机推荐
- Python中令人迷惑的4个引用
第一个:执行时机的差异 1. array = [1, 8, 15] g = (x for x in array if array.count(x) > 0) array = [2, 8, 22] ...
- 校准产品质量,把控出海航向,腾讯WeTest《2019中国移动游戏质量白皮书》正式开放预约
作者:wetest小编 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:https://wetest.qq.com/lab/view/483.html 每当步入一个新的年份, ...
- POJ2516 Minimum Cost
亲爱的,一个货物销售者,现在遇到了一个大问题,他需要你的帮助.在他的销售区域有 N 个店主(从 1 到 N)向他储存货物,Dearboy 有M 个供应点(从 1 到 M),每个供应点提供 K 种不同的 ...
- git清除用户信息
remote: Repository not found. fatal: repository 'https://github.com/chenbowen950908/zhongzanjiaoyu.g ...
- Educational Codeforces Round 82 C. Perfect Keyboard
Polycarp wants to assemble his own keyboard. Layouts with multiple rows are too complicated for him ...
- leetcode 0216
目录 ✅ 893. 特殊等价字符串组 描述 解答 cpp py ✅ 811. 子域名访问计数 描述 解答 cpp py ✅ 509. 斐波那契数 描述 解答 cpp py ✅ 521. 最长特殊序列 ...
- PCSearch
1.hinstance:GetModuleHandle(NULL) 2.窗口直角: 方法1:在Oncreate函数中添加以下代码,然而这种方法会导致窗口阴影无效 LONG styleValue = : ...
- Codeforces Round #616 (Div. 2) D
莫队的模板 struct node{ int l,r,id; }q[maxn]; int cmp(node a,node b) { ) ? a.r < b.r : a.r > b.r); ...
- vue 组件,以及组件的复用
有时候代码的某一模块可能会经常使用到,那么完全可以把这一模块抽取出来,封装为一个组件,哪里需要用到的时候只需把模块调用即可 .参考vue官方 https://cn.vuejs.org/v2/guide ...
- SpringBoot+JWT+SpringSecurity+MybatisPlus实现Restful鉴权脚手架
若图片查看异常,请前往掘金查看:https://juejin.im/post/5d1dee34e51d4577790c1cf4 前言 JWT(json web token)的无状态鉴权方式,越来越流行 ...