多态:
多态是Java执行期的行为,而不是编译期的行为。
父类引用指向子类的对象,该引用不能执行子类特有的方法(引用只能执行父类中存在的方法,但执行的方法体有可能是被子类所重写的方法体)。要执行子类特有的方法,必须将该引用向下转型成子类引用类型。
late binding例子:
抽象类、抽象方法和接口:
抽象方法只能定义在抽象类中,如果某个类包含了一个抽象方法,那么该类必须是抽象类。抽象类中可以存在具体的方法。抽象类无法被实例化。
子类继承了一个抽象父类,如果该子类无法实现所有父类的抽象方法(重写成具体方法),那么该子类就必须定义成抽象类。
接口中所有的方法都是抽象的,定义方法时,可以省略abstract关键字。接口可以看成一个特殊的抽象类。
一个类可以实现多个接口,但是一个类只能继承一个父类(Java是单继承的)。
一个类可以继承一个类,同时去实现多个接口。
静态变量和方法:
静态成员变量和静态方法都可以通过类来使用,而不必通过对象。
子类可以继承父类的静态方法,但是不能重写静态方法。子类中也可以有和父类相同的静态方法,这时,从父类继承下来的静态方法将被隐藏。
引用调用实例方法时,执行的方法是引用所指向的对象的方法。而引用调用静态方法时,执行的方法是改引用的类的静态方法。
静态方法不能访问非静态成员变量,只能访问静态成员变量。而非静态的方法能访问静态的成员变量。
不能在静态方法中用this.关键字。
final(终态):
final可以修饰类、方法和变量。
final修饰类时,表示该类不能被继承。
final修饰方法时,表示该方法不能被重写(override)。
final修饰变量时,表示该变量的值不能被修改。 注意:当变量为引用类型时,只要变量指向的对象不变(引用类型,它的值不变,意为着指向同一个对象),对象的值可以被改变。
声明final变量时,必须在声明时就赋值。
在类中生命final变量时,可以在声明时就赋值,也可以在构造方法中赋值。但两者不能同时出现。如果用构造方法给final变量赋值,那么所有的构造方法都必须为final赋值。
静态代码块:
当Java虚拟机加载类(最顶层的类先加载)时,类中的静态代码块执行。因此静态代码块可以做一些类加载的初始化工作。静态代码块只会被执行一次。
多态是Java执行期的行为,而不是编译期的行为。
父类引用指向子类的对象,该引用不能执行子类特有的方法(引用只能执行父类中存在的方法,但执行的方法体有可能是被子类所重写的方法体)。要执行子类特有的方法,必须将该引用向下转型成子类引用类型。
late binding例子:
public class LateBindingTest{
public static void main(String[] args){
A a = null;
if(args[0].equals("1")){
a = new B();
}
else{
a = new C();
}
a.print();
}
}
interface A{
public void print();
}
class B implements A{
public void print(){
System.out.println("B");
}
}
class C implements A{
public void print(){
System.out.println("C");
}
}
抽象类、抽象方法和接口:
抽象方法只能定义在抽象类中,如果某个类包含了一个抽象方法,那么该类必须是抽象类。抽象类中可以存在具体的方法。抽象类无法被实例化。
子类继承了一个抽象父类,如果该子类无法实现所有父类的抽象方法(重写成具体方法),那么该子类就必须定义成抽象类。
接口中所有的方法都是抽象的,定义方法时,可以省略abstract关键字。接口可以看成一个特殊的抽象类。
一个类可以实现多个接口,但是一个类只能继承一个父类(Java是单继承的)。
一个类可以继承一个类,同时去实现多个接口。
静态变量和方法:
静态成员变量和静态方法都可以通过类来使用,而不必通过对象。
子类可以继承父类的静态方法,但是不能重写静态方法。子类中也可以有和父类相同的静态方法,这时,从父类继承下来的静态方法将被隐藏。
引用调用实例方法时,执行的方法是引用所指向的对象的方法。而引用调用静态方法时,执行的方法是改引用的类的静态方法。
静态方法不能访问非静态成员变量,只能访问静态成员变量。而非静态的方法能访问静态的成员变量。
不能在静态方法中用this.关键字。
final(终态):
final可以修饰类、方法和变量。
final修饰类时,表示该类不能被继承。
final修饰方法时,表示该方法不能被重写(override)。
final修饰变量时,表示该变量的值不能被修改。 注意:当变量为引用类型时,只要变量指向的对象不变(引用类型,它的值不变,意为着指向同一个对象),对象的值可以被改变。
声明final变量时,必须在声明时就赋值。
在类中生命final变量时,可以在声明时就赋值,也可以在构造方法中赋值。但两者不能同时出现。如果用构造方法给final变量赋值,那么所有的构造方法都必须为final赋值。
静态代码块:
当Java虚拟机加载类(最顶层的类先加载)时,类中的静态代码块执行。因此静态代码块可以做一些类加载的初始化工作。静态代码块只会被执行一次。