您的位置 首页 java

局部内部类和匿名内部类——2

三 局部内部类

3.1 问题提问:

 1 局部内部类的编写位置以及访问方式  

3.2 视频播放

 4.21秒  

3.3 问题答案

 1 局部内部类的编写位置以及访问方式
局部内部类是在方法中定义的类,外界无法直接使用,需要在方法内部创建对象并且使用

局部内部类可以直接访问外部类的成员,也可以访问方法内的局部变量  

3.4 局部内部类详解

 特点:
1 定义在方法中的内部类使用范围等同于局部变量 局部内部类不仅可以访问外部类的私有成员
还可以访问所在外部类中所在方法的局部变量 也就是说局部内部类持有外部类的 this

2 被内部类访问的局部变量会被拷贝一份到内部类中,即Inner中存在一个成员变量,用于记录局 部变量a的值。若局部变量不是final的,其取值就可以被修改,而Inner对象中保存的是其原来的值,这就会出现数据不同步的问题。 Java 为了避免数据不同步的问题,做出了内部类只可 以访问final的局部变量的限制。在java8中,可以不使用final,如果局部变量被内部类访 问,那么该局部变量相当于自动使用了final修饰。

3 封装性比成员内部类还要高,只能在外部类的某个方法中去定义使用

4 由于和局部变量平级 所以不能够使用 public protected  private  修饰局部内部类 final 是可以修饰的不能被继承

public class 内部类 {
public  static   void  main(String[] args) {
Outer out=new Outer();
out.method(10);
}
}
class Outer{
private int a=10;

public void method(int b){
int c=20;//局部变量

class Inner{//作用范围就是method方法内部
public void print(){
//我想调用这个方法怎么弄只能抓紧在method方法内部做
//出了这个方法就不能用了
System.out.println("hehe");
System.out.println(a);
System.out.println(b);
System.out.println(c);
//b=20; //若局部变量不是final的,其取值就可以被修改
}
}
Inner in=new Inner();
in.print();
}

}  

四 匿名内部类

4.1 问题提问:

 1 什么是匿名内部类,有什么前提
2 使用匿名内部的前提条件以及各式是什么
3 如何调用匿名内部类中的多个方法  

4.2 视频播放

 11.38秒  

4.3 问题答案

 1 什么是匿名内部类,有什么前提
顾名思义是一个没有名字的局部内部类 (特殊的局部内部类)
2 使用匿名内部的前提条件以及格式是什么
1)继承一个类或者是实现一个接口
2)只会创建该类的一个对象
3)只能用默认的 构造方法  (只能通过无参构造去创建对象)
各式
new 接口/类(){
@override
public void m(){}
};
理解: 将(继承/实现)(方法重写)(对象创建) 三个步骤合为一个步骤

3 如何调用匿名内部类中的多个方法
匿名内部类可以用继承的类的引用/实现的接口引用 去接受
然后通过引用去调用多个方法
public class Demo1 {
public static void main(String[] args) {
Ia ia=new Ia(){
@Override
public void m1() { }
@Override
public void m2() { }
};
ia.m1();
ia.m2();
//或者
new ClassA(){
@Override
public void m1() {

}
}.m1();

}
}
interface Ia{
public void m1();
public void m2();
}
 abstract  class ClassA{
public abstract void m1();
}  

4.4 匿名内部类详解

 //创建一个接口
interface Teacher {
public void Teach();
}
public class demo1 {
public static void main(String[] args) {
//整体会隐式的创建了匿名内部类的对象
new Teacher() {
@Override
public void Teach() {
System.out.println("苍老师teacher");
}
} ;
}
}
匿名内部类指的是
//继承/实现
{
@Override
public void Teach() {
System.out.println("苍老师teacher");
}
} ; //有类的结构但是没有类名
//方法重写
@Override
public void Teach() {
System.out.println("苍老师teacher");
}
//对象创建
new Teacher2()
匿名内部了类的语法完全可以用局部内部类代替
匿名代码少写一行 丢掉的是程序的可读性
它的应用很广泛 很多程序员都在使用,可以让人在编程的时候思路不断

匿名内部类能定义构造方法吗?
匿名内部类没名字不能定义构造方法只能使用默认的构造方法  
局部内部类和匿名内部类——2

文章来源:智云一二三科技

文章标题:局部内部类和匿名内部类——2

文章地址:https://www.zhihuclub.com/192535.shtml

关于作者: 智云科技

热门文章

网站地图