面向对象高级——Object类、包装类以及匿名内部类

2024-08-28 16:08

本文主要是介绍面向对象高级——Object类、包装类以及匿名内部类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Object类

 知识点:掌握Object类的作用、掌握Object类中toString()、equal()方法的作用 ,掌握Object接收引用数据类型的操作。
如果一个类在定义时没有明确指明继承哪个类,则默认继承Object类。
在java中所有的类都有一个公共的父类就是Object类,一个类只要没有明显的继承一个类,则肯定就是Object的子类。如下两种代码表示是一样的:
class Person extends Object{}
class Person{}

class Demo{	// 定义Demo类,实际上就是继承了Object类
};
public class ObjectDemo01{public static void main(String args[]){Demo d = new Demo() ;	// 实例化Demo对象System.out.println("不加toString()输出:"+d) ;System.out.println("加上toString()输出:"+d.toString()) ;}
};


从以上代码 的运行结果看,加和不加toString()完成的功能是一样的,也就是证明了对象打印时一定会调用toString ()方法是默认调用的,那么此时就可以覆写toString进行信息的输出。
class Person{private String name ;	// 定义name属性private int age ;		// 定义age属性public Person(String name,int age){this.name = name ;this.age = age ;}public String toString(){return "姓名:" + this.name + ";年龄:" + this.age ;}
};
public class ObjectDemo02{public static void main(String args[]){Person per = new Person("刘勋",24) ;	 // 实例化PersonSystem.out.println("对象信息:" + per) ;}
};
就是打印对象所包含的信息。
equals()方法
equals()方法的主要功能是进行对象的比较操作。
String本身也是Object类的子类,所以已经覆写了此方法。
剖析equals如下所示:
class Person{private String name ;	// 定义name属性private int age ;		// 定义age属性public Person(String name,int age){this.name = name ;this.age = age ;}public boolean equals(Object obj){if(this==obj){		// 地址相等return true ;	// 肯定是同一个对象}if(!(obj instanceof Person)){	// 不是Person对象return false ;}Person per = (Person) obj ;	// 向下转型if(per.name.equals(this.name)&&per.age == this.age){return true ;	// 依次比较内容}else{return false ;}}public String toString(){return "姓名:" + this.name + ";年龄:" + this.age ;}
};
public class ObjectDemo03{public static void main(String args[]){Person per1 = new Person("刘勋",30) ;	 // 实例化PersonPerson per2 = new Person("刘勋",30) ;	 // 实例化PersonSystem.out.println(per1.equals(per2)?"是同一个人!" : "不是同一个人!") ;System.out.println(per1.equals("hello")?"是同一个人!" : "不是同一个人!") ;}
};

Object类是所有类的父类,则所有类的对象都可以使用Object接收,但是Object不光可以接收对象,还可以接收任意的引用数据类型。
使用Object接收接口实例。
interface A{public String getInfo();	
}
class B implements A{public String getInfo(){	// 覆写方法return "Hello World!!!" ;}
};
public class ObjectDemo04{public static void main(String args[]){A a = new B() ;	// 向上转型,为接口实例化Object obj = a ;	// 使用Object接收,向上转型A x = (A)obj ;	// 向下转型System.out.println(x.getInfo()) ;}
};
数组实际上也可以使用Object类进行接收。
public class ObjectDemo05{public static void main(String args[]){int temp[] = {1,3,5,7,9} ;	// 定义数组Object obj = temp ;	// 使用Object接收数组print(obj) ;}public static void print(Object o){if(o instanceof int[]){		// 判断是否是整型数组int x[] = (int[])o ;for(int i=0;i<x.length;i++){System.out.print(x[i] + "\t") ;}}}
};
Object类的总结:
1、Object类是所有类的父类,只要是引用数据类型都可以使用Object进行接收。
2、对象在进行向下转型之前一定要先发生向上转型,要使用instanceof关键字判断。
3、toString():对象打印时调用。
4、equals(): 对象比较时调用。
5、String类也是Object类的子类。

包装类

包装类的要点:需要掌握包装类的作用、掌握包装类的自动装箱以及自动拆箱操作、掌握包装类的转换操作。
一切皆对象,但是八种数据类型不是对象。例如:把int包装成一个类,这样就可以以对象的形式操作基本数据类型。






下面以Integer和Float为例。
装箱以及拆箱:
将基本数据类型变为包装类称为装箱。
将包装类的类型变为基本数据类型称为拆箱。
public class WrapperDemo01{public static void main(String args[]){int x = 30 ;		// 基本数据类型Integer i = new Integer(x) ;	// 装箱:将基本数据类型变为包装类int temp = i.intValue()	;// 拆箱:将一个包装类变为基本数据类型}
};
下面再以小数为例:
public class WrapperDemo02{public static void main(String args[]){float f = 30.3f ;		// 基本数据类型Float x = new Float(f) ;	// 装箱:将基本数据类型变为包装类float y = x.floatValue()	;// 拆箱:将一个包装类变为基本数据类型}
};
在JDK1.5之前对于程序本身来说包装类是不能直接进行“+、-、*、/、++、......”,是不可以的,因为是一个类不能这样做。但是在JDK1.5之后对程序包装类功能进行了改变,增加了自动装箱以及自动拆箱的功能而且也可以使用包装类直接进行数字运算。
public class WrapperDemo03{public static void main(String args[]){Integer i = 30 ;	// 自动装箱成IntegerFloat f = 30.3f ;	// 自动装箱成Floatint x = i ;			// 自动拆箱为intfloat y = f ;		// 自动拆箱为float}
};
在包装类中还存在一个最大的特点,就是可以将字符串变为指定的数据类型。



public class WrapperDemo04{public static void main(String args[]){String str1 = "30" ;	// 由数字组成的字符串String str2 = "30.3" ;	// 由数字组成的字符串int x = Integer.parseInt(str1) ;	// 将字符串变为int型float f = Float.parseFloat(str2) ;	// 将字符串变为int型System.out.println("整数乘方:" + x + " * " + x + " = " + (x * x)) ;System.out.println("小数乘方:" + f + " * " + f + " = " + (f * f)) ;}
};

包装类总结:
1、java中有八种基本数据类型的包装类,可以将基本数据类型以类的形式进行操作。
2、基本数据类型变为包装类的过程称为装箱,将包装类变为基本数据类型的过程称为拆箱。
3、在JDK1.5之后提供了自动装箱和自动拆箱的操作。
4、实际上这而八个类是JAVA中提供的类库。
5、使用包装类可以将字符串进行基本数据类型的转换。

匿名内部类

内部类:在一个类的内部还有另外一个类称为内部类,那么匿名内部类,如果一个类在整个操作中只使用一次的话,就可以将其定义为匿名内部类,匿名内部类是在抽象类以及接口的基础上发展而来的。
interface A{public void printInfo() ;	// 
}
class B implements A{	// 实现接口public void printInfo(){System.out.println("Hello World!!!") ;}
};
class X {public void fun1(){this.fun2(new B()) ;}public void fun2(A a){a.printInfo() ;}
};
public class NoInnerClassDemo01{public static void main(String args[]){new X().fun1() ;		// 实例化X类的对象,并调用fun1()方法}
};
如果B类只使用一次的话,就没有必要为其单独定义一个类,此时就可以使用匿名内部类解决问题。
interface A{public void printInfo() ;	// 
}
class X {public void fun1(){this.fun2(new A(){public void printInfo(){System.out.println("Hello World!!!") ;}}) ;}public void fun2(A a){a.printInfo() ;}
};
public class NoInnerClassDemo02{public static void main(String args[]){new X().fun1() ;		// 实例化X类的对象,并调用fun1()方法}
};

在实际的开发中经常会用到各种开发的框架,在框架上会大量的引用匿名内部类。

interface A{public void printInfo() ;	// 
}
class X {public void fun1(){this.fun2(new A(){public void printInfo(){System.out.println("Hello World!!!") ;}}) ;}public void fun2(A a){a.printInfo() ;}
};
public class NoInnerClassDemo02{public static void main(String args[]){new X().fun1() ;		// 实例化X类的对象,并调用fun1()方法}
};


这篇关于面向对象高级——Object类、包装类以及匿名内部类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115239

相关文章

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

2409wtl,网浏包装

原文 介绍 本教程帮助你用IE引擎构建一个基于WTL,并使用我编写的处理IWebBrowser2接口包装类的迷你浏览器. 因为知道代码可能很难读,因此本教程帮助你逐步开发一个迷你浏览器. 背景 大部分项都与互联网浏览有关.我常用超文本视图使用SDI. 有时,我要用真正的浏览器函数,因此我为IWebBrowser2编写了一个包装器. 此包装类可处理在IE中嵌入的窗口.它还可非常简单的处

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx = NULL;result = avformat_open_input(&fmt_ctx, input_filename, NULL, NULL); 其中fmt_ctx 如何分配内存的?如下 int avformat_open_input(