(27) Java中的继承具有与C相同的效果,但采用的语法不同。
Java用extends关键字标志从一个基础类的继承,并用super关键字指出准备在基础类中调用的方法,它与我们当前所在的方法具有相同的名字(然 而,Java中的super关键字只允许我们访问父类的方法——亦即分级结构的上一级)。通过在C中设定基础类的作用域,我们可访问位于分级结构较深 处的方法。亦可用super关键字调用基础类构建器。正如早先指出的那样,所有类最终都会从Object里自动继承。和C不同,不存在明确的构建器初 始化列表。但编译器会强迫我们在构建器主体的开头进行全部的基础类初始化,而且不允许我们在主体的后面部分进行这一工作。通过组合运用自动初始化以及来自 未初始化对象句柄的异常,成员的初始化可得到有效的保证。
b举例说明
public class Foo extends Bar
{
publicFoo(String msg)
{
super(msg); Calls base constructor }
public baz(int i)
{ Override
super.baz(i);
Calls base method
}
}
(28) Java中的继承不会改变基础类成员的保护级别。
我们不能在Java中指定public,priv ate或者protected继承,这一点与C是相同的。此外,在衍生类中的优先方法不能减少对基础类方法的访问。例如,假设一个成员在基础类中属于public,而我们用另一个方法代替了它,那么用于替换的方法也必须属于public(编译器会自动检查)。
(29) Java提供了一个interface关键字,它的作用是创建抽象基础类的一个等价物。
在其中填充抽象方法,且没有数据成员。这样一来,对于仅仅设计成一个接口的东西,以及对于用extends关键字在现有功能基础上的扩展,两者之间便产生 了一个明显的差异。不得用abstract关键字产生一种类的效果,因为我们不能创建属于那个类的一个对象。一个abstract(抽象)类可包含抽 象方法(尽管并不要求在它里面包含什么东西),但它也能包含用于具体实现的代码。因此,它被限制成一个单一的继承。通过与接口联合使用,这一方案避免了对 类于C虚拟基础类那样的一些机制的需要。
为创建可进行“例示”(即创建一个实例)的一个interface(接口)的版本,需使用implements关键字。它的语法类于继承的语法,如下所示:
public interface Face
{
public void smile();
} public class Baz extends Bar implements Face
{
public void smile( )
{
System.out.println("a warm smile");
}
}
(30) Java中没有virtual关键字,因为所有非static方法都肯定会用到动态绑定。
在Java中,程序员不必自行决定是否使用动态绑定。C之所以采用了virtual,是由于我们对性能进行调整的时候,可通过将其省略,从而获得执行 效率的少量提升(或者换句话说:“如果不用,就没必要为它付出代价”)。virtual经常会造成一定程度的混淆,而且获得令人不快的结果。final关 键字为性能的调整规定了一些范围——它向编译器指出这种方法不能被取代,所以它的范围可能被静态约束(而且成为嵌入状态,所以使用C非virtual 调用的等价方式)。这些优化工作是由编译器完成的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-58491-10.html
五角大楼一再扬言
配上mv歌更好听
幸福快乐