IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java | (六)面向对象(2)匿名对象、方法的重载、封装和隐藏 -> 正文阅读

[Java知识库]java | (六)面向对象(2)匿名对象、方法的重载、封装和隐藏

匿名对象

理解:创建对象时,没有显式地赋予一个变量名,即匿名对象
特征:匿名对象只能调用一次

package com.atguigu.exer;

public class Text {
	public static void main(String[] args) {
		Phone p = new Phone();
		System.out.println(p);
		
		new Phone().sendEmail();
		new Phone().price = 109;
		new Phone().showPrice();
	}
}

class Phone{
	double price;//价格
	
	public void sendEmail() {
		System.out.println("发邮件");
	}
	
	public void showPrice() {
		System.out.println("价格为:" + this.price);
	}
}

结果
在这里插入图片描述
也可以这样用:

class phoneMall{
	public void show(Phone phone) {
		phone.sendEmail();
	}
}


phoneMall phoneM= new phoneMall();
phoneM.show(new Phone());

方法的重载

在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可
如:
sort(int a)
sort(int a,int b)
sort(String a)

package com.atuguigu.java1;
public class OverLoad {
	//反转数组
	public void reverse(int[] arr) {
		for(int i = 0;i < arr.length/2;i++) {
			int temp = arr[i];
			arr[i] = arr[arr.length-i-1];
			arr[arr.length-i-1]  = temp;
			
		}
		
	}
	
	public void reverse(double[] arr) {
		for(int i = 0;i < arr.length/2;i++) {
			double temp = arr[i];
			arr[i] = arr[arr.length-i-1];
			arr[arr.length-i-1]  = temp;
		}
		
	}
}

在调用时:

package com.atuguigu.java1;

public class OverLoadText {
	public static void main(String[] args) {
		OverLoad o = new OverLoad();
		int[] a = new int[] {1,2,4,56,7,8,9};
		double[] b = new double[] {0.4,0.8,434.23,45.32,34.90};
		o.reverse(a);
		o.reverse(b);
		for(int i = 0;i < a.length;i++) {
			System.out.println(a[i]);
		}
		System.out.println();
		for(int i = 0;i < b.length;i++) {
			System.out.println(b[i]);
		}
	}
}

a和b是两种不同的数组类型,但通过重载便可调用相同方法

可变个数形参的方法
可变个数形参的格式:数据类型…变量名
当调用可变个数形参的方法是,传入的参数个数可以是 ,0个,1个,2个。。。(使用方法跟数组一样)
可变形参的方法与本类中的方法名相同,形参不同的方法之间构成重载
可变个数形参在方法中必须声明在末尾
可变个数形参在方法的形参中,最多只能声明一个

package com.atuguigu.java1;
public class OverLoad {
	public void show(int a) {
		System.out.println(23);
	}
	
	public void show(String s) {
		System.out.println("String s");
	}
	
	public void show(String ... strs) {//必须写在public void show(String s) 后面(最末尾)
		System.out.println("String...strs");
	}
}

package com.atuguigu.java1;

public class OverLoadText {
	public static void main(String[] args) {
		OverLoad tLoad = new OverLoad();
		tLoad.show(122);//23
		tLoad.show("43");//String s
		tLoad.show("343","ew");//String...strs
	}
}

值传递机制

参数是基本数据类型,实参赋给形参的是实参真实存储的数据值
参数是引用数据类型:实参赋给形参的是实参存储数据的地址值

例子:画以下内存图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例题:

(1)
在这里插入图片描述

package com.atuguigu.java1;
public class Circle {
	double radius;
	
	public double findArea() {
		return Math.PI * this.radius * this.radius;
	}
}

package com.atuguigu.java1;

public class PassObject {
	public void printAreas(Circle c,int time) {
		System.out.println("Radius" + "\t" + "Area");
		for(int i = 1;i <= time;i++) {
			c.radius = i;
			System.out.println(i+"\t" + c.findArea());
		}
		
	}
}

package com.atuguigu.java1;

public class MainFunction {
	public static void main(String[] args) {
		Circle c = new Circle();
		PassObject p = new PassObject();
		p.printAreas(c,4);
	}
}

结果:
在这里插入图片描述
(2)递归:求100的和:

package com.atuguigu.java1;

public class MainFunction {
	public static void main(String[] args) {
		MainFunction f = new MainFunction();
		int sum =  f.DiGui(100);
		System.out.println(sum);
	}
	
	public int DiGui(int i) {
		if(i == 1) {
			return i;
		}else {
			return i + DiGui(i-1);
		}
	}
}

(3)
在这里插入图片描述

package com.atuguigu.java1;

public class MainFunction {
	public static void main(String[] args) {
		MainFunction f = new MainFunction();
		int result =  f.DiGui(10);
		System.out.println(result);//10497
	}
	
	public int DiGui(int i) {
		if(i == 0) {
			return 1;
		}else if(i == 1){
			return 4;
		}else {
			return 2*DiGui(i-1) + DiGui(i-2);
		}
	}
}

(4)
在这里插入图片描述

package com.atuguigu.java1;

public class MainFunction {
	public static void main(String[] args) {
		MainFunction f = new MainFunction();
		int n = 10;
		int result =  f.DiGui(n);
		for(int i = 1;i <= n;i++) {
			System.out.println(f.DiGui(i));
		}
	}
	
	public int DiGui(int i) {
		if(i == 1 || i ==2) {
			return 1;
		}else {
			return DiGui(i-1) + DiGui(i-2);
		}
		
	}
}

封装和隐藏

程序设计追求“高内聚,低耦合”
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅对外暴露少量的方法用于使用

封装性的体现:我们将列的属性私有化(private),同时提供公共的(public)方法获取(getXXX)和设置(setXXX)
不对外暴露的私有方法
单例模式…

package com.atuguigu.java1;

public class MainFunction {
	public static void main(String[] args) {
		Amimal a = new Amimal();
		a.name = "大象";
		a.age = 2;
		//a.legNum = 4; //报错:The field Animal.legNum is not visible
		a.setLegNum(90);
		a.show();
	}
}

class Amimal{
	String name;
	int age;
	private int legNum;//腿的个数
	
	public void setLegNum(int l) {
		//需要在赋值加入限制条件,只能在方法中进行
		if(l >= 0 && l % 2 ==0) {
			this.legNum = l;
		}else {
			legNum = 0;
		}
	}
	
	public int getLegNum() {
		return legNum;
	}
	
	public void show() {
		System.out.println("age:" + age + ",name:" + name + ",legNum:" + legNum);
	}
}

权限修饰符

封装性的体现,需要权限修饰符来配合
四种,大到小:public,protect,缺省,private
在这里插入图片描述

构造器
作用:创建对象

package com.atuguigu.java1;

public class Person {
	private int age;
	String name;
	
	//构造器
	public Person() {
		System.out.println("Person().....");
	}
	
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int a) {
		if(age < 0 || age > 130) {
			System.out.println("can't");
			return;
		}else {
			this.age = a;
		}
	}
}

package com.atuguigu.java1;

public class MainFunction {
	public static void main(String[] args) {
		Person person = new Person();
		System.out.println(person.getAge());
		
		person.setAge(23);
		System.out.println(person.getAge());
	}
	
}

结果:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:19:45  更:2021-07-13 17:21:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 12:52:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码