static: 静态变量 和静态方法 可直接通过类名调用,一个类共用一个静态变量。
静态方法不能调用非静态变量,静态方法。
非静态方法可以调用静态变量、静态方法。
--------------------------------------------------------------------------------------------------
instanceof:
void test(Animal animal)
{
if(animal instanceof Tiger)
......
}
--------------------------------------------------------------------------------------------------
final: final申明的类没有子类,申明的方法不能被子类继承,申明的变量值不能被改变!
final class ClassName extends SuperClassName{
final int i;
final void tt(){}// final可以省略不写
}
--------------------------------------------------------------------------------------------------
abstract: 抽象类不能实例化,但可以有变量。如 对:ClassName cn; 错: ClassName cn = new ClassName()
修饰符 abstract ClassName{
void abstractMethod(); //要在子类中实现
}
--------------------------------------------------------------------------------------------------
interface: 接口中的变量默认添加 public static final 修饰符,可省略不写。方法是public的!抽象类可以不实现interface,但是,子类必须全部实现。
接口的作用已是创建常量组,比如星期。
public/protected interface InterfaceName{
int i = 5;// 等同于public static final int i = 5;
返回值类型 methodName(par); //等同于public 返回值类型 methodName(par);
}
class ClassName implements InterfaceName, InterfaceName2,...
{}
接口可以继承, public/protected interface IterfaceName extends InterfaceName2{}
接口不能实例化,但可以申明变量。 错:InterfaceName in = new InterfaceName(); 对:InterfaceName in = new ClassName();//这个ClassName必须实现这个接口。
接口和抽象类是非常相像的,但它们之间是有区别的,主要区别有以下几方面。
一个类可以实现众多个接口,但是只能继承一个抽象类。可以说接口是取消程序语
言中的多继承机制的一个衍生物,但它不完全如此。 抽象类可以有非抽象方法,即可以有已经实现的方法,继承它的子类可以对方法进行覆写;而接口中定义的方法必须全部为抽象方法。 在抽象类中定义的方法,它们的修饰符可以是 public、 protected、 private,也可以是默认值;但是在接口中定义的方法全是 public 的。 抽象类可以有构造函数,接口不能。两者都不能实例化,但是都能通过它们来存放子类对象或是实现类的对象。可以说它们都可以实现多态。