抽象类和抽象方法
1.抽象类和抽象方法都通过 abstract 关键字来修饰。
2.抽象类不能实例化。抽象类中可以没有、可以有一个或多个抽象方法,甚至可以全部方法都是抽象方法。
3.抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。
注意:
"public void print(){}"不是抽象方法,而是有实现但实现为空的普通方法。
"public abstract void print();"才是抽象方法,别忘记了最后的分号。
abstract 可以用来修饰类和方法,但不能用来修饰属性和构造方法。
final 修饰符
1.用 final 修饰的类,不能再被继承。
final class Penguin{
}
class SubPenguin extends Penguin{ // 错误,Penguin 类不能被继承
}
2.用 final 修饰的方法,不能被子类重写。
class Penguin{
public final void print(){}
}
class SubPenguin extends Penguin{
public void print(){} // 错误,print()不能被子类重写
}
3.用 final 修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次。
public class Penguin{
final String home="南极"; // 居住地
public void setHome(String home){
this.home=home; // 错误,home 不可以再次赋值
}
}
注意:
使用 final 修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的。
abstract 不能和 private 同时修饰一个方法;
abstract 不能和 static 同时修饰一个方法;
abstract 不能和 final 同时修饰一个方法或类。
总结:
1.继承是 Java 中实现代码重用的重要手段之一。Java 中只支持单继承,即一个类只能有一个直接父类。java.lang.Object 类是所有 Java 类的祖先。
2.在子类中可以根据实际需求对从父类继承的方法进行重新编写,称为方法的重写或覆盖。
3.子类中重写的方法和父类中被重写方法必须具有相同的方法名、参数列表、返回值类型必须和被重写方法的返回值类型相同或者是其子类。
4.如果子类的构造方法中没有通过 super 显式调用父类的有参构造方法,也没有通过this’显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
5.抽象类不能实例化。抽象类中可以没有、可以有一个或多个抽象方法。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。
6.用 final修饰的类,不能再被继承。用final修饰的方法,不能被子类重写。用final修饰的变量将变成常量,只能赋值一次。
1.抽象类和抽象方法都通过 abstract 关键字来修饰。
2.抽象类不能实例化。抽象类中可以没有、可以有一个或多个抽象方法,甚至可以全部方法都是抽象方法。
3.抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。
注意:
"public void print(){}"不是抽象方法,而是有实现但实现为空的普通方法。
"public abstract void print();"才是抽象方法,别忘记了最后的分号。
abstract 可以用来修饰类和方法,但不能用来修饰属性和构造方法。
final 修饰符
1.用 final 修饰的类,不能再被继承。
final class Penguin{
}
class SubPenguin extends Penguin{ // 错误,Penguin 类不能被继承
}
2.用 final 修饰的方法,不能被子类重写。
class Penguin{
public final void print(){}
}
class SubPenguin extends Penguin{
public void print(){} // 错误,print()不能被子类重写
}
3.用 final 修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次。
public class Penguin{
final String home="南极"; // 居住地
public void setHome(String home){
this.home=home; // 错误,home 不可以再次赋值
}
}
注意:
使用 final 修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的。
abstract 不能和 private 同时修饰一个方法;
abstract 不能和 static 同时修饰一个方法;
abstract 不能和 final 同时修饰一个方法或类。
总结:
1.继承是 Java 中实现代码重用的重要手段之一。Java 中只支持单继承,即一个类只能有一个直接父类。java.lang.Object 类是所有 Java 类的祖先。
2.在子类中可以根据实际需求对从父类继承的方法进行重新编写,称为方法的重写或覆盖。
3.子类中重写的方法和父类中被重写方法必须具有相同的方法名、参数列表、返回值类型必须和被重写方法的返回值类型相同或者是其子类。
4.如果子类的构造方法中没有通过 super 显式调用父类的有参构造方法,也没有通过this’显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
5.抽象类不能实例化。抽象类中可以没有、可以有一个或多个抽象方法。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。
6.用 final修饰的类,不能再被继承。用final修饰的方法,不能被子类重写。用final修饰的变量将变成常量,只能赋值一次。