Java基础教程(第3版)_第7章_内部类与异常类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/5/16
第9页
• 匿名类在创建对象时,要直接使用父类 的构造方法
完成三件事: 1、创建一个Speak的子类,该子类为匿名类 2、改写Speak中的方法speakHello()
3、返回该子类的引用,赋给Speak speak
2020/5/16
第 10 页
• 匿名类可以继承父类的方法也可以重写父类的方法。
public static void main(String args[]) {
RedCowForm form = new RedCowForm("红牛农场");
form.showCowMess();
form.cow.speak();
}
}
2020/5/16
第5页
• 内部类产生的字节码文件的名称为外嵌类名$内部类 名.class,在该名称中可以区分该内部类到底是哪一 个类的内部类。
2020/5/16
第 11 页
InputAlphabet.java abstract class InputAlphabet {
public abstract void input(); } InputEnglish.java public class InputEnglish extends InputAlphabet { //输出英文字母的子类
• 其他类可以通过外部类.内部类的方式创建内部类的 对象。
RedCowForm. RedCow redcow=new RedCowForm.
RedCow (180,119,6000); • 静态内部类可以直接访问外部类的静态成员,但不
能直接访问外部类的实例成员。
2020/5/16
第7页
class Outer {
System.out.println(f);
System.out.println(this.f);
System.out.println(new Outer().f); // 访问实例成员
System.out.println(l); // 访问静态成员
}
}
}
public class Demo {
public static void main(String args[]) {
2020/5/16
第4页
void speak() {
System.out.println("偶是"+cowName+",身高:"+height+"cm 体重:"+
weight+"kg,生活在"+formName);
}
} //内部类结束
}
//外嵌类结束
public class Example7_1 {
Outer.InnerTool ob = new Outer.InnerTool();
ob.print();
I am Inner
}
I am Inner
}
I am Outer
hehe
2020/5/16
第8页
7.2 匿名类
7.2.1 和子类有关的匿名类
匿名类是一个子类,用于临时创建一个内部类对象, 不必单独去定义该子类。
• 静态内部类:内部类使用static修饰成静态的形式。 使用static修饰类,这在正常类中是不可能的。定义 静态内部类的语法如下所示。
class Wai
{
static class Nei
{ //内部类成员
} //外部类成员
}
2020/5/16
第6页
• 因为静态内部类是外部类的静态成员,静态成员是 不需要外部类对象而存在的,所以在外部类外,对 静态内部类进行访问时是不需要创建外部类对象的。
下面的例子1(Example7_1.java)中有一个RedCowForm类, 该类中有一个名字为RedCow(红牛)的内部类。程序运行效 果如图7.1。
2020/5/16
第3页
public class RedCowForm { static String formName; RedCow cow; //内部类声明对象 RedCowForm() { } RedCowForm(String s) { cow = new RedCow(150,112,5000); formName = s; } public void showCowMess() { cow.speak(); } class RedCow { //内部类的声明 String cowName = "红牛"; int height,weight,price; RedCow(int h,int w,int p){ height = h; weight = w; price = p; }
private String f = "I am Outer";
private static String l= "hehe";
public static class InnerTool {
private String f = “I am Inner”; //可以有非静态成员
public void print() {
《Java 基础教程(第3版)》 第7章
内部类与异常类
2020/5/16Fra Baidu bibliotek
第1页
主要内容
2020/5/16
第2页
7.1 内部类
Java支持在一个类中声明另一个类,这样的类称作内部类, 而包含内部类的类成为内部类的外嵌类。 内部类和外嵌类之间的重要关系如下。 •内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的 方法也可以调用外嵌类中的方法。(包括私有的) •内部类的类体中不可以声明类变量和类方法。外嵌类的类体中 可以用内部类声明对象,作为外嵌类的成员。 •内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类 声明对象。
• 使用匿名类时,必然是在某个类中直接用匿名类创建 对象,因此匿名类一定是内部类,匿名类可以访问外 嵌类中的成员变量和方法,匿名类的类体中不可以声 明static成员变量和static方法
• 由于匿名类是一个子类,但没有类名,所以在用匿名 类创建对象时,要直接使用父类的构造方法。
• 尽管匿名类创建的对象没有经过类声明步骤,但匿名 对象的引用可以传递给一个匹配的参数,匿名类的常 用的方式是向方法的参数传值。
创建子类对象时,除了要使用父类的构造方法,还 包括类体,此类体被认为是一个子类去掉类声明后的类 体,称作匿名类。类体内可以对父类、抽象类以及接口 的方法进行重写,也可以定义自己的方法。
由于无名可用,所以不可能用匿名类声明对象,但 却可以直接用匿名类创建一个对象。
创建形式: new 父类名(){ 匿名类类体 };