栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2022.0601学习Java 笔记之匿名内部类、object类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022.0601学习Java 笔记之匿名内部类、object类

匿名内部类

匿名内部类是在抽象类和接口基础之上建立起来的一种结构,必须以抽象类和接口为主

实例

interface A{
	public void fun();
}
public class TextDemo14{
	public static void main(String[] args) {
		A a = new A(){
			public void fun(){
			System.out.println("Hello World!");
			}
		};
		a.fun();
	}
}

Object类

在整个Java设计过程中,实际上已经很好的考虑到了参数统一问题,毕竟在整个Java的环境下,类至少有几十亿个,那么在进行语言设计时就必须考虑到这几十亿个类的统一问题,所以才提出了Object的概念。

在每定义一个类的时候,如果此类没有明确的继承一个类,则将默认继承Object类,即:所有的类但是Object子类,那么以下两种类的定义结构完全相同。

class Person{

}

class Person extends Object{//默认是Object子类

}

范例:利用Object类接收所有类对象

class Person extends Object{	//默认隐含Object
	
}
public class TextDemo14{
	public static void main(String[] args) {
		Object objA = new Person();
		Object objB = "HELLO";
		System.out.println(objA);	//Person@64ea66
		System.out.println(objB);	//HELLO
	}
}

在Object类里面定义了许多方法,那么其中在用户定义简单Java类的时候从标准来讲应该覆写Object类之中的三个方法:

  • 取得对象信息:public String toString(),代替之前的getInfo();
  • 对象比较:public boolean equals(Object obj);
  • 对象哈希码:public int hashCode()

取得对象信息;toString()

既然所有的类但是Object类的子类,那么就证明,Object之中所有的方法每一个类都会继承。当用户输出对象的时候,实际上都会默认调用toString()方法,如果子类,没有覆写此方法,则会调用Object类之中提供的toString(),而此方法的默认实现是输出对象的公共属性--对象地址数据

那么一般可以由用户自己进行toString()方法的覆写

范例:覆写toString()方法 

class Person{	//默认隐含Object
	private String name;
	private int age;
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	public String toString(){
		return "姓名:" + this.name + ",年龄:" + this.age;
	}
}
public class TextDemo14{
	public static void main(String[] args) {
		Person per = new Person("李四",30);
		System.out.println(per);	
		System.out.println(per.toString());	
	}
}

对象比较:public boolean equals(Object obj)

在学习String类的时候已经接触到了equals()方法,是进行字符串比较的,因为String类的equals()方法就是覆写Object类的equals()方法而来。所以严格来讲,对象比较的方法不是之前的compare()而应该换成equals()

范例

class Person{	//默认隐含Object
	private String name;
	private int age;
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	public boolean equals(Object obj){
		if(obj == null){
			return false;
		}
		if(this == obj){
			return true;
		}
		if(!(obj instanceof Person)){//不是本类实例
			return false;
		}
		Person Person = (Person)obj;	//向下转型
		if(this.name.equals(Person.name)&&this.age == Person.age){
			return true;
		}
		return false;
	}
	public String toString(){
		return "姓名:" + this.name + ",年龄:" + this.age;
	}
}
public class TextDemo14{
	public static void main(String[] args) {
		Person perA = new Person("李四",30);
		Person perB = new Person("李四",30);
		System.out.println(perA.equals(perB));
		System.out.println(perA.equals("ABC"));
	}
}

结果

接收所有引用数据

既然Object是属于类的父类,那么一定可以接收所有的类对象,可是在Java设计的过程中,考虑到参数统一问题,让Object类的功能扩大了,即:使用Object可以接收数组或者是接口对象。

范例:使用Object接收数组

public class TextDemo14{
	public static void main(String[] args) {
		Object obj = new int[]{1,2,3};
		if(obj instanceof int[]){
			int result[] = (int[]) obj;
			for(int x = 0 ; x < result.length ; x++){
				System.out.prin(result[x] + "、");    //输出1、2、3、
			}
		}
	}
}

范例:利用Object接收接口对象

interface A{
}
class B implements A{
	public String toString(){
		return "HELLO";
	}
}
public class TextDemo14{
	public static void main(String[] args) {
		A a = new B();	//接口实例化
		Object obj = a;	//使用Object接收接口对象
		A temp = (A)obj;	//向下转型
		System.out.println(temp);    //输出HELLO
	}
}

 所有的引用类型都可以使用Object接收,以后可以利用Object作为参数的统一了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946305.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号