【济南校区】java基础-内部类(二) 上一次和大家聊了内部类,今天和大家聊一聊内部类的另外两种体现形式,局部内部类和匿名内部类。 局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问 A:定义格式 class 外部类 { 修饰符 返回值类型 方法名(参数) { class 内部类 { //其他代码 } } } B:访问方式 在外部类方法中,创建内部类对象,进行访问 给大家看一个局部内部类的代码: [Java] 纯文本查看 复制代码 package com.itheima_02;
/*
* 局部内部类
* 在方法内,出了方法之后就无法使用
*
*
*/
public class InnerDemo3 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
class Outer {
public void method() {
int num = 10;
class Inner {
public void function() {
System.out.println("function");
}
}
Inner i = new Inner();
i.function();
}
public void test() {
//Inner i = new Inner();
//System.out.println(num);
}
} 说白了,就是类的定义位置不同。 下边我们要聊得就是匿名内部类,这个我们在以后的开发中会经常使用到。 A:作用:匿名内部类是创建某个类型子类对象的快捷方式。 B:格式: new 父类或接口(){ //进行方法重写 }; 代码演示 //已经存在的父类: public abstract class Person{ public abstract void eat(); } //定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量 Person p = new Person(){ public void eat() { System.out.println(“我吃了”); } }; //调用eat方法 p.eat(); 使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,。虽然是两个步骤,但是两个步骤是连在一起完成的。 匿名内部类如果不定义变量引用,则也是匿名对象。代码如下: new Person(){ public void eat() { System.out.println(“我吃了”); } }.eat(); 案例如下: [Java] 纯文本查看 复制代码 package com.itheima_03;
/*
* 匿名内部类:
* 可以把匿名内部类看成是一个没有名字的局部内部类
* 定义在方法当中
* 必须在定义匿名内部类的时候创建他的对象
* 格式:
* new 类/接口(){
* 如果是创建了继承这个类的子类对象,我们可以重写父类的方法
* 如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法
* };
* 原理:而是创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象
*
*/
public class InnerDemo4 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inner {
public void function();
}
class Outer {
public void method() {
/*new Inner() {
@Override
public void function() {
System.out.println("function");
}
}.function();;*/
Inner i = new Inner() {
@Override
public void function() {
System.out.println("function");
}
};
i.function();
i.function();
}
} 大家会发现如果我们是用的匿名内部类,我们会简化了一下开发步骤,使我们的代码看起来更加整洁和有效率。
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830 |