1.抽象类
1)抽象方法:只有声明没有实现的方法。可能这个方法不需要实现,但是必须要定义,因为,假如你要实现多态的话,你父类里面必须有这个方法才行。这个时候就用抽象方法来定义,表明只有定义,没有实现,具体实现由子类自己决定。
抽象方法就是拿来被重写的。
举例 : public abstract void myMethod(); 后面连花括号也没有。
2)抽象类:抽象类的意思就是有抽象方法存在的类,如果一个类中包含了抽象方法,那么该类一定是抽象类。该类的前面要用 abstract关键字来修饰。
举例:
abstract class MyClass()
{
//里面可以有数据成员,可以有已经实现了的方法,但是必须包含抽象方法
}
3)如果要使用该抽象类,跟继承的语法一致,使用extends关键字,子类若要继承父类,且父类是一个抽象类,那么子类必须实现父类所定义的所有抽象方法。否则,该子类需要声明成为一个抽象类(abstractclass)。
4)抽象类无法实例化,也就是说不能通过new的形式生成一个抽象类的对象(实例)。
2.接口
1)接口的地位相当于类,接口中的方法全部都是抽象方法,没有已经实现了的方法。用interface关键字来进行修饰。接口中只有常量(因为所有变量都是staticfinal的,你写或者不写这个限制它都会默认为staticfinal的)和方法的定义(所有方法都是抽象方法,你写或者不写abstract都一样,而且只能是public的,因为你要实现),没有变量和方法的实现。
2)要实现接口,需要使用implements关键字,并且必须实现接口中的全部抽象方法。因为接口中本身都是抽象方法,所以不需要加abstract关键字来修饰。
3)另外,一个类可以同时实现多个接口,多个接口之间用逗号分隔开
举例: class MyClass impelements Interface1, Interface2
{
}
4)而且,一个类可以同时继承并且实现接口,
举例: class MyClass extends Class implements Interface1,Interface2
{
}
5)接口也可以实现多态
也就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口和实现接口的类之间的强制类型转换方式和父类与子类之间的强制类型转换方式完全一样。
6)接口中可以有数据成员,它们都是final static的(通常不在接口中定义数据成员)
接口中有一个问题,就是假如2个接口中定义了同样的方法,实现的时候又同时实现了2个接口,不知道会产生什么??????
1)抽象方法:只有声明没有实现的方法。可能这个方法不需要实现,但是必须要定义,因为,假如你要实现多态的话,你父类里面必须有这个方法才行。这个时候就用抽象方法来定义,表明只有定义,没有实现,具体实现由子类自己决定。
抽象方法就是拿来被重写的。
举例 : public abstract void myMethod(); 后面连花括号也没有。
2)抽象类:抽象类的意思就是有抽象方法存在的类,如果一个类中包含了抽象方法,那么该类一定是抽象类。该类的前面要用 abstract关键字来修饰。
举例:
abstract class MyClass()
{
//里面可以有数据成员,可以有已经实现了的方法,但是必须包含抽象方法
}
3)如果要使用该抽象类,跟继承的语法一致,使用extends关键字,子类若要继承父类,且父类是一个抽象类,那么子类必须实现父类所定义的所有抽象方法。否则,该子类需要声明成为一个抽象类(abstractclass)。
4)抽象类无法实例化,也就是说不能通过new的形式生成一个抽象类的对象(实例)。
2.接口
1)接口的地位相当于类,接口中的方法全部都是抽象方法,没有已经实现了的方法。用interface关键字来进行修饰。接口中只有常量(因为所有变量都是staticfinal的,你写或者不写这个限制它都会默认为staticfinal的)和方法的定义(所有方法都是抽象方法,你写或者不写abstract都一样,而且只能是public的,因为你要实现),没有变量和方法的实现。
2)要实现接口,需要使用implements关键字,并且必须实现接口中的全部抽象方法。因为接口中本身都是抽象方法,所以不需要加abstract关键字来修饰。
3)另外,一个类可以同时实现多个接口,多个接口之间用逗号分隔开
举例: class MyClass impelements Interface1, Interface2
{
}
4)而且,一个类可以同时继承并且实现接口,
举例: class MyClass extends Class implements Interface1,Interface2
{
}
5)接口也可以实现多态
也就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口和实现接口的类之间的强制类型转换方式和父类与子类之间的强制类型转换方式完全一样。
6)接口中可以有数据成员,它们都是final static的(通常不在接口中定义数据成员)
接口中有一个问题,就是假如2个接口中定义了同样的方法,实现的时候又同时实现了2个接口,不知道会产生什么??????
7)关于接口有一个有趣的设计模式,就是如果设计了一个接口,那么同时也配套设计一个实现接口的类,这个类里面的方法都只是空实现,只比原先的抽象方法多了中括号,好处是:如果你只是想实现这个接口中的某个或者某部分方法,那么如果有这个类的话就可以直接继承,不用每次都把所有方法实现一遍。
但是这样做要接口还有什么意义呢???很有意义,因为一个类可以同时实现多个接口,但是只能单继承。使用接口灵活性大很多。