面向对象高级——Object类、包装类以及匿名内部类
Object类
例如以下两种代码表示是一样的:
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()) ;
}
};
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
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) ; // 实例化Person
System.out.println("对象信息:" + per) ;
}
};
就是打印对象所包括的信息。
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) ; // 实例化Person
Person per2 = new Person("刘勋",30) ; // 实例化Person
System.out.println(per1.equals(per2)?
"是同一个人。" : "不是同一个人!
") ;
System.out.println(per1.equals("hello")?
"是同一个人!" : "不是同一个人。") ;
}
};
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类的总结:
包装类
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
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 ; // 自己主动装箱成Integer
Float f = 30.3f ; // 自己主动装箱成Float
int x = i ; // 自己主动拆箱为int
float 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)) ;
}
};
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
包装类总结:
匿名内部类
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类、包装类以及匿名内部类的更多相关文章
- JavaSE基础知识(5)—面向对象(Object类)
一.包 java.lang包,属于java中的核心包,系统默认导入的,不用手动导入该包中的类:Object.System.String.Integer等 1.包的好处 ①分类管理java文件,查找和管 ...
- [javaSE] 面向对象(Object类toString)
每一个对象,都有一个在内存中的地址哈希值,这个哈希值是十六进制的 调用Object对象的hashCode()方法,返回这个对象的哈希值 调用Integer.toHexString()方法,转换十六进制 ...
- 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类
interface A{ public void printInfo() ; // } class B implements A{ // 实现接口 public void printInfo(){ S ...
- 面向对象之包装类与Object类
一.包装类(Wrapper) 1.包装类出现原因 为了使8种基本数据类型的变量具有类的特征,引入包装类 2.类型间转化 ① 基本数据类型---->对应的包装类:自动装箱 包装类---->对 ...
- 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:Object类
class Demo{ // 定义Demo类,实际上就是继承了Object类 }; public class ObjectDemo01{ public static void main(String ...
- Object类、包装类、内部类详解
1.Object类 1.概念: 1.1 所有类在创建时都默认继承了java.lang.Object 1.2 所有类对象都可以声明为类对象的引用 Object ob1=new String(); Obj ...
- Java面向对象 Object类 内部类
Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
- Java面向对象进阶篇(包装类,不可变类)
一. Java 8的包装类 Java中的8种基本数据类型不支持面向对象的变成机制,也不具备对象的特性:没有成员变量,方法可以调用.为此,Java为这8 种基本数据类型分别提供了对应的 包装类(Byte ...
- Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类
Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯.2.面向对象的出现,将复杂的事情简单化.3.面向对象的出现,将之前过程中 ...
随机推荐
- TeXworks使用教程指南
TeXworks是Windows版本的TeX Live默认提供的编辑器.值得注意的是,TeXworks 是XeTeX 作者 Jonathan Kew 开发的,其特点是界面简洁友好,集成了轻便的 PDF ...
- RF的特征子集选取策略(spark ml)
支持连续变量和类别变量,类别变量就是某个属性有三个值,a,b,c,需要用Feature Transformers中的vectorindexer处理 上来是一堆参数 setMaxDepth:最大树深度 ...
- java将XML文档转换成json格式数据
功能 将xml文档转换成json格式数据 说明 依赖包:1. jdom-2.0.2.jar : xml解析工具包;2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 ...
- 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础
本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...
- The Art of Deception
前言 一些黑客毁坏别人的文件甚至整个硬盘,他们被称为电脑狂人(crackers)或计算机破坏者(vandals).另一些新手省去学习技术的麻烦,直接下载黑客工具侵入别人的计算机,这些人被称为脚本小子( ...
- [数学] 将长为L的木棒随机折成3段,则3段构成三角形的概率
1.题目 如题,将长为L的木棒随机折成3段,则3段构成三角形的概率是多少? 2.解析 这个与其说是编程题目,倒不如说是个数学题目.可能是你没有见过,或者没有过这种解题思想.(还是那句,一回生两回熟,类 ...
- 2、Python特征
Python特征 Python编程语言中的定位 脚本语言 高阶动态编程语言 简单易学 Python是一种代表简单主义思想的语言.Python的这种伪代码本质是它最大的优点之一.它使你能够专注于解决问题 ...
- 自定义View 可清除内容、设置图标、下划线的输入框 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- ie7 z-index 失效问题
解决办法: 父级元素加上position:relative;并设置z-index. 父级元素的z-index优先,其中包含的元素的z-index是相对于父级元素的index. <div styl ...
- 赋值操作符、复制构造函数、析构函数、static成员练习
/** * 定义一个Employee类,包含雇员名字和一个唯一的雇员标识,为该类定义默认构造函数和参数为表示 * 雇员名字的string构造函数.如果该类需要复制构造函数或赋值操作符,实现这些函数 * ...