[color=darkblue]二.继承
1. 什么是继承?子类对象的创建?
答:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称 为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继 承,即一个类从多个超类派生的能力。
◇ 创建子类
格式:
[code]class SubClass extends SuperClass {
…
}[/code]2. this和super的用法?
◇ super
java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况:
1)访问父类被隐藏的成员变量,如:
[code]super.variable; [/code] 2)调用父类中被重写的方法,如:
[code]super.Method([paramlist]);[/code] 3)调用父类的构造函数,如:
[code]super([paramlist]);[/code]例:
[code]import java.io.*;
class SuperClass{
int x;
SuperClass( ) {
x=3;
System.out.println("in SuperClass : x=" +x);
}
void doSomething( ) {
System.out.println("in SuperClass.doSomething()");
}
}
class SubClass extends SuperClass {
int x;
SubClass( ) {
super( ); //调用父类的构造方法
x=5; //super( ) 要放在方法中的第一句
System.out.println("in SubClass :x="+x);
}
void doSomething( ) {
super.doSomething( ); //调用父类的方法
System.out.println("in SubClass.doSomething()");
System.out.println("super.x="+super.x+" sub.x="+x);
}
}
public class Inheritance {
public static void main(String args[]) {
SubClass subC=new SubClass();
subC.doSomething();
}
}[/code]◇ this
this与this()用来引用对象自身的成员。
This 的使用有三种情况:
1)访问自身对象被隐藏的成员变量,如:
[code]this.variable; [/code]
2)调用自身对象中被重写的方法,如:
[code]this.Method([paramlist]);[/code] 3)调用自身的构造函数,如:
[code]this ([paramlist]);[/code]注意:在定义构造函数时,应将调用父类构造函数的代码super(…)置于最上部。因为必须首先初始化继承自父类的成员。
继承中的访问控制符?
3. 什么是覆盖?
答:我们把子类拥有与父类相同成员的情况称为覆盖(override)。
访问控制符要使用与父类相同或比父类权限更大的控制符。
覆盖父类成员的目的在于通过在子类中重新定义扩展父类功能。
4. 什么是多态?
在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
1) 编译时多态
在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。
2) 运行时多态
由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。
◇ 重写方法的调用原则:java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。
5. 什么是实例成员,什么是类成员?
答:实例成员和类成员
用static 关键字可以声明类变量和类方法,其格式如下:
[code]static type classVar;
static returnType classMethod({paramlist}) {
…
}
[/code] 如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
1) 实例变量和类变量
每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。
2) 实例方法和类方法
实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。
6. 引用的范围?
7. 引用变量的类型转换?
8. 什么是Object类?Object型引用变量?
答:类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法。
equals() :比较两个对象(引用)是否相同。
getClass():返回对象运行时所对应的类的表示,从而可得到相应的信息。
toString():用来返回对象的字符串表示。
finalize():用于在垃圾收集前清除对象。[/color]
1. 什么是继承?子类对象的创建?
答:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称 为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继 承,即一个类从多个超类派生的能力。
◇ 创建子类
格式:
[code]class SubClass extends SuperClass {
…
}[/code]2. this和super的用法?
◇ super
java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况:
1)访问父类被隐藏的成员变量,如:
[code]super.variable; [/code] 2)调用父类中被重写的方法,如:
[code]super.Method([paramlist]);[/code] 3)调用父类的构造函数,如:
[code]super([paramlist]);[/code]例:
[code]import java.io.*;
class SuperClass{
int x;
SuperClass( ) {
x=3;
System.out.println("in SuperClass : x=" +x);
}
void doSomething( ) {
System.out.println("in SuperClass.doSomething()");
}
}
class SubClass extends SuperClass {
int x;
SubClass( ) {
super( ); //调用父类的构造方法
x=5; //super( ) 要放在方法中的第一句
System.out.println("in SubClass :x="+x);
}
void doSomething( ) {
super.doSomething( ); //调用父类的方法
System.out.println("in SubClass.doSomething()");
System.out.println("super.x="+super.x+" sub.x="+x);
}
}
public class Inheritance {
public static void main(String args[]) {
SubClass subC=new SubClass();
subC.doSomething();
}
}[/code]◇ this
this与this()用来引用对象自身的成员。
This 的使用有三种情况:
1)访问自身对象被隐藏的成员变量,如:
[code]this.variable; [/code]
2)调用自身对象中被重写的方法,如:
[code]this.Method([paramlist]);[/code] 3)调用自身的构造函数,如:
[code]this ([paramlist]);[/code]注意:在定义构造函数时,应将调用父类构造函数的代码super(…)置于最上部。因为必须首先初始化继承自父类的成员。
继承中的访问控制符?
3. 什么是覆盖?
答:我们把子类拥有与父类相同成员的情况称为覆盖(override)。
访问控制符要使用与父类相同或比父类权限更大的控制符。
覆盖父类成员的目的在于通过在子类中重新定义扩展父类功能。
4. 什么是多态?
在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
1) 编译时多态
在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。
2) 运行时多态
由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。
◇ 重写方法的调用原则:java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。
5. 什么是实例成员,什么是类成员?
答:实例成员和类成员
用static 关键字可以声明类变量和类方法,其格式如下:
[code]static type classVar;
static returnType classMethod({paramlist}) {
…
}
[/code] 如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
1) 实例变量和类变量
每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。
2) 实例方法和类方法
实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。
6. 引用的范围?
7. 引用变量的类型转换?
8. 什么是Object类?Object型引用变量?
答:类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法。
equals() :比较两个对象(引用)是否相同。
getClass():返回对象运行时所对应的类的表示,从而可得到相应的信息。
toString():用来返回对象的字符串表示。
finalize():用于在垃圾收集前清除对象。[/color]