|
五、面向对象篇
34extends和implements有什么不同?
答:extends用于(单)继承一个类(class),而implements用于实现一个接口(inter
face
)。
interface的引入是为了部分地提供多继承的功能。
在interface中只需声明方法头,而将方法体留给实现的class来做。
这些实现的class的实例完全可以当作interface的实例来对待。
有趣的是在interface之间也可以声明为extends(单继承)的关系。
35java怎么实现多继承?
答:java不支持显式的多继承。
因为在显式多继承的语言例如c++中,会出现子类被迫声明祖先虚基类构造函数的问题,
而这是违反面向对象的封装性原则的。
java提供了interface和implements关键字来部分地实现多继承。参见34。
36abstract是什么?
答:被声明为abstract的方法无需给出方法体,留给子类来实现。
而如果一个类中有abstract方法,那么这个类也必须声明为abstract。
被声明为abstract的类无法实例化,尽管它可以定义构造方法供子类使用。
37public,protected,private有什么不同?
答:这些关键字用于声明类和成员的可见性。
public成员可以被任何类访问,
protected成员限于自己和子类访问,
private成员限于自己访问。
Java还提供了第四种的默认可见性,当没有任何public,protected,private修饰时,成
员是?br>?一包内可见??br>
类可以用public或默认来修饰。
38Override和Overload有什么不同?
答:Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类
型。
Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,
这些方法有着相同的名称和不同的参数类型。
39我继承了一个方法,但现在我想调用在父类中定义的方法。
答:用super.xxx()可以在子类中调用父类方法。
40我想在子类的构造方法中调用父类的构造方法,该怎么办?
答:在子类构造方法的第一行调用super(...)即可。
41我在同一个类中定义了好几个构造方法并且想在一个构造方法中调用另一个。
答:在构造方法第一行调用this(...)。
42我没有定义构造方法会怎么样?
答:自动获得一个无参数的构造方法。
43我调用无参数的构造方法失败了。
答:如果你至少定义了一个构造方法,就不再有自动提供的无参数的构造方法了。
你需要显式定义一个无参数的构造方法。
44我该怎么定义类似于C++中的析构方法(destructor)?
答:提供一个voidfinalize()方法。在GarbargeCollector回收该对象时会调用该方法。
注意实际上你很难判断一个对象会在什么时候被回收。作者从未感到需要提供该方法。 上一页 [1] [2] [3] [4] [5] 下一页 |