------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
在面向对象的语言中,类的继承无疑给编程带来更高的效率,所谓继承就是在定义新的类时,在已有类的基础上再定义些新的成员变量,只需通过extends继承原有类的方法和变量,原有的类我们就叫父类,新的类叫做子类。在java,关于类的继承有它自己特有的规则,本人在此做个小小的总结吧。
1,java不支持多重继承,也就是说子类至多只能有一个父类,简单地讲打个比方,a是子类它的父类如果是b,则不会再有其它的父类。就像一个儿子只能有一个生你的爸爸一样。
2,可以多层继承,形象点讲就是A继承了B,B继承了C,那么A间接就继承了C。
3,子类中继承父类中非私有的成员变量和成员方法,但不继承构造方法,如果子类想继承父类的构造方法可以用super()来调用。
4,子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。
5,子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。其实这个时候这个父类的方法被覆盖了。这个时候若想再调用父类中那个被覆盖的方法可以用super关键字。这里多说一句,覆盖父类中方法时,子类中的方法的访问权限不能比父类更严格。
现在来讲一下final关键字。
首先要说明的是在java中对类,方法,变量的声明都可以用final来修饰的。
1,类中的应用。
final修饰的类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。我们在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会被扩展,那么我们就可以加final关键字来修饰。
2,变量的应用
用final修饰的成员变量表示常量,而且只能赋值一次!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。一旦给final变量赋初值后,值就不能再改变了。另外,final变量定义的时候,可以先声明,而不给初值,这种变量也称为空白final,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,空白final在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同, 却有保持其恒定不变的特征。
3,方法中的应用
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。也就是说,final修饰的方法不能被子类重写。方法中定义的内置类只能访问该方法内的final类型的局部变量。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
例如:
public class Test1 {
public static void main(String[] args) {
}
public void f1() {
System.out.println("f1 ");
}
}
//无法被子类覆盖的方法
public final void f2() {
System.out.println("f2");
}
public void f3() {
System.out.println("f3"); }
private void f4() {
System.out.println("f4 ");
}
}
public class Test2 extends Test1 {
public void f1(){
System.out.println(" Test1父类方法f1被覆盖!" );
}
public static void main(String[] args) {
Test2 t = newTest2();
t.f1();
t.f2();
//调用从父类继承过来的final方法
t.f3();
//调用从父类继承过来的方法
//t.f4();
//调用失败,无法从父类继承获得
}
}
4,在参数中的应用我们可以将形参用final来修饰,但这样我们就无法在方法中修改它了。例如:
public class Test2{
public static void main(String[] args) {
newTest1().f1(1);
}
public void f1( final int i)
{
//i++; i是final类型的,值不允许改变的.
System.out.print(i);
}
}
以上算是对final关键字和类的继承一些简单的感悟吧。
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------