这几天的笔试遇到了下列几个常见的语法问题,在此写一个小小的总结。
重载(Overloading)与重写(Overriding)都是多态性的一种表现。
重载:
(1).一个类中具有相同的方法名,这些相同的方法名各自具有不同的参数个数和不同的参数类型,在调用方法时通过传递不同的参数个数和参数类型来决定调用哪个方法。
(2).重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回值类型作为重载函数的区分标准。
重写:
(1).子类继承父类时,对父类函数进行重新定义,在子类中定义某方法与其父类中方法有相同的函数名和参数,我们就说该方法被重写。
(2).若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
抽象类:
抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:
abstract void fun();
- 1
含有抽象方法的类称为抽象类,类名前用abstract修饰。抽象类不仅具有抽象方法,还具有其他的成员变量和普通成员方法。抽象类也可以没有抽象方法,但一定要用abstract修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
[public] abstract class ClassName {
abstract void fun();
}
- 1
- 2
- 3
抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。
接口:
英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。
[public] interface InterfaceName {
}
- 1
- 2
- 3
接口中的变量会被隐式地指定为public static final变量,而方法会被隐式地指定为public abstract方法,并且接口中所有的方法不能有具体的实现,也就是说接口方法都是抽象方法,接口也就是一个抽象类。
要让一个类遵循某组特地的接口需要使用implements关键字,具体格式如下:
class ClassName implements Interface1,Interface2,[....]{
}
- 1
- 2
可以看出,允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。
抽象类和接口的区别:
语法层面上的区别:
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
- 1
- 2
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。