很高兴今天能够学习这个章节,本来昨天就可以学完,不过因为我滴老父亲过生日了,我赶紧赶回家吃了个饭耽误了一个晚上。不出意外,这一章讲的就是接口和多态的关系。上一章讲的是一个父类引用可以有多种实例,那么这一章讲的就是一个接口有多重实现形式(昨天老师上课讲的hh)。然后百度一下多态,之前不容易理解,现在理解应该深了一些:
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
看看引言吧!
注意:这里的接口和gui(图形用户界面,这个interface是界面的意思)的意义不同,应该是接受一个协议或者规则的意思,是百分百的抽象类,不可以被初始化,用来被实现。
有的类本身是很抽象的,就不应该被初始化,他没有一个实体。——在设计完继承结构之后,确定类的抽象形式,abstract。(编译器就会帮助你不初始化这个类),但是可以声明,不可以new实例化。
例子:gui中的组件类是抽象类
多态的使用——object终极类
如果说一个方法可以用于多个类别,为什么不直接将类别作为参数传递呢?这个时候就需要多态,并且有一个终极类将不同的类别传进去
书中例子:自己创建一个MyDogList+MyCatList——>一个MyAnimalList
class MyAnimalList
{
private Animal animals =new Animal[5];
int nextIndex=0;
void add(Animal a)
{
if(nextIndex<animals.length)
{
animals[nextIndex]=a;
System.out.println(""Animal added at"+nextIndex);
nextIndex++;
}//end if
}//end method
}//end class
public class MyAnimalListTestDrive
{
MyAnimalList list=new MyAnimalList();
Dog dog=new Dog();
Cat cat= new Cat();
list.add(dog);
list.add(cat);
}
一些关于object的知识点
判断两个对象是否相等equals()
获得它的类getClass()
产生对象的哈希代码hashCode()
toString()方法,这个方法,如果直接print对象的话就会自动调用这个方法!,所以可以借助这个来完成一些说明的功能
(可以在类中重写toString()方法)
Q&A
里面都没有抽象方法;最好重写equals。hashCode。toString方法;有的final不能覆盖;
Q:为什么Object是一个具体的类呢????
A:因为有时候就是有用——如线程同步化(虽然不知道但还是接受了这个设定)
它的目的:作为多态让方法可以处理多种类类型;让程序执行期都有可以用的实例方法——线程相关
Object警告:放进ArrayList<Object>之后就不再是原来的对象了,变得抽象不具体了。
结果:不能使用具体类的方法了。实质返回的是object的引用类型,编译器是通过引用类型来查看方法是否可用的。
(每个子类都可以被当做是父类来处理,因为父类可以实现的东西比较少,父类被包含在子类里面)
object转换——强制类型转换为原来的引用类型
instanceof