第Ⅱ期Android菜鸟饭团#Java学习#第十二课 活动笔记
一.Object类 Object类是所有java类的根基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为object类 Public class Person{ ............ } 等价于 Public class Person extends Object{ ........ } |
二.toString Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息;再进行String与其它类型数据的链接操作时,将会自动调用该对象的toString()方法,可以根据需要重写toString方法,objact的方法toString用来打印对象的,默认打印对象名和和一个16进制的编码,可以重写打印自己想要的任意数据
public class dog { int color; int high;
public String toString() { return “I am a hot dog”; } } |
三.equals方法 Object类中定义有: Public boolean equals(Object obj)方法 提供定义对象是否相等的逻辑 Object的equals方法定义为:X equals(y)当x和y是同一个对象的应用时返回ture 否则返回fals 可以根据需要重写equals方法
objact的方法toString用来比较两个对象是否相同,比较的是两个对象的引用,如果两个引用指向同一个对象则返回ture否者返回false,可以重写自己选择比较任意数据或者直接返回ture
public class Dog { int color; int high; Dog(int color,int high) { this.color = color; this.high = high; } public String toString() { return “I am a hot dog”; } public static void main(String args[]) { Dog d1 = new Dog(1,1) Dog d1 = new Dog(1,1)
} }
|
四.对象转型 一个基类的引用类型变量可以指向其子类的对象 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法) 可以使用引用变量instanceof类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类 子类的对象可以当作基类的对象来使用称作向上转型,反之称为向下转型
java对象类型转换,当对不具有相同类型的对象进行强制类型转换时,java运行时将抛出java.lang.ClassCastException的错误,这不单单是java不允许这样做,任何一种面向对象德开发语言都不允许的类型转换。所以今天只讨论对象继承关系下的向上转型和向下转型问题。
java中向上、向下转型并不是什么高人定义的数据,它的命名原因跟象形文字的来源差不多,原因在于很早以前我们在设置类图时,总是习惯将父类放在上面,子类放在下面,然后通过一条父子连接线连接,就是这样从感官的角度 将子类向父类转换称之为“向上转型” 反之,为“向下转型”。
在java开发中我们经常见到的为了降低程序间的耦合度,在定义某些类是通常使用的都是父类型,之后程序调用者就可以根据自己的需求将子类型赋值上去,实现功能上的调用,在这过程中就是运用了对象的向上转型,运行时通过后期绑定来实现对实际子类的调用。这样就实现了传说中java的多态功能。然而有些时候为了完成某些父类没有的功能,我们需要将向上转型后的父类再转成子类,实现其他的处理,这就是我们的向下转型。在这里,一定要切记一点在进行向下转型前一定要判断是否类型相同(isAssignFrom或instanceof),否则将抛出java.lang.ClassCastException的错误。
这时候有人可能会有很多的误解(我也曾经被弄糊涂了),都说子类继承了父类,那么父子类之间具有相同的类型那么为什么不能够直接进行向下转型呢??? 原因在于 子类继承父类是对父类所提供的服务接口的一个扩展,也就是说 父类提供的接口是子类所提供接口的一个子集,所以说单纯的父类对象时无法转型某个子类对象的。
SuperClass super = new SuperClass;//创建父类对象 SonClass son = (SonClass)super; //这样的操作时完全错误的 |
我们可以再设计一下父类和子类的类结构: SuperClass{ public void printA(){System.out.println("Super printA");} } SonClass extends SuperClass{ public void printA(){System.out.println("Son printA")} //对父类的一个覆写 public void printB(){System.out.println("Son PrintB")} //对父类的一个扩展接口 } |
这个时候我们强制将父类对象向下转换成子类对象时,父类对象中没有printB()方法,这样就会造成混乱,所以在进行向下转型时一定要先判断父类的类型。
每一个技术小白都有一个成为大神的梦想,现在Android菜鸟饭团就给你这个成就梦想的机会。我们提供最新的Android技术教学,只要你又耐心和毅力就一定会在这里有所收获。 Android菜鸟饭团由 南阳GDG组织发起,秉承着开放、分享、创新的原则,希望通过GDG社区的力量能够给更多的想要学习Android开发技术的小白们创造一个学习,交流,分享的环境。同往常的GDG活动一样,我们依然是任性的一个子都不要,并且还在周六的分享中提供盒饭和不定期的惊喜小礼物呦~所以快来加入我们吧,为你的大神梦想迈出第一步。
|