1.
不正确的引用:
class StaticError{
String mystring=“hello”;
public static void main(String args[]) {
System.out.println(mystring);
}
}
编译时错误信息: nonstatic variable mystring cannot be referenced from a static context
为什么不正确:只有对象的方法可以访问对象的变量。
解决的办法 :将变量改成类变量
class StaticError{
static String mystring=“hello”;
public static void main(String args[]){
System.out.println(mystring);
}
}
2.
我们可以编写自己的类,也可以使用由系统提供的类库。下面列出了一些常用的Java包:
· java.lang包 基本语言类,程序运行时自动引入
· java.io包 所有的输入输出类
· java.util包 实用的数据类型类
· java.awt包 构建图形用户界面(GUI)的类
· java.awt.image包 处理和操纵网上图片的工具类
· java.awt.peer包 实现与平台无关的GUI的类
· java.applet包 实现Java Applet的工具类
· java.net包 实现网络功能的类
3.
域的隐藏
子类重新定义一个与从父类继承来的域变量完全相同的变量,称为域的隐藏。即子类中定义了与父类同名的域变量,就是子类变量对同名父类变量的隐藏。这里所谓隐藏是指子类拥有了两个相同名字的变量,一个来自继承父类,另一个由自己定义。在这种情况下,当子类执行继承的父类方法时,处理的是父类的变量,而当子类执行它自己定义的方法时,所操作的就是它自定义的变量,而把来自继承父类的变量“隐藏”起来了。
4.
方法的覆盖与域的隐藏的不同之处在于:子类隐藏父类的域只是使之不可见,父类的同名域在子类对象中仍然占有自己独立的内存空间;而子类方法对父类同名方法的覆盖将清除父类方法占用的内存空间,从而使父类方法在子类对象中不复存在。
5.
构造方法的继承
子类可以继承父类的构造方法,构造方法的继承遵循以下原则:
(1)子类无条件地继承父类的无参数的构造方法。
(2)如果子类没有定义构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类定义了构造方法,则在创建新对象时,将先执行继承的父类无参数构造方法,然后再执行自己的构造方法。
(3)对于父类的带参数构造方法,子类可以通过在自己的构造方法中使用supper关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句。
下面我们主要讨论第2和第3点。
6.
研究一下接口与抽象类到底有什么区别是很有意义的。它们之间存在以下的区别:
(1)接口不能有任何实现了的方法,而抽象类可以。
(2)类可以继承(实现)许多接口,但只能继承一个父类。
(3)类有严格的层次结构,而接口没有层次结构,没有联系的类可以实现相同的接口。
7.
实现接口时应注意的问题:
(1)在类的声明部分,用implements关键字声明该类将要实现哪些接口。
(2)类在实现抽象方法时,必须用public修饰符。
(3)除抽象类以外,在类的定义部分必须为接口中所有的抽象方法定义方法体,且方法首部应该与接口中的定义完全一致。
(4)若实现某接口的类是abstract的抽象类,则它可以不实现该接口所有的方法。但是对于这个抽象类的任何一个非抽象子类,不允许存在未被实现的接口方法。即非抽象类中不能存在抽象方法。