1.内部类的访问特点?
2.成员内部类定义在哪里?
3.成员内部类如何实现调用?提示:方法一、方法二
4.局部内部类定义在哪里?
5.局部内部类如何实现调用?提示:方法一、方法二
6.匿名内部类本质?
7.匿名内部类如何实现调用?提示:方法一、方法二
1.内部类可以直接访问外部类的成员,包括私有
2.外部类要访问内部类的成员,必须创建对象
package chart6; public class demo6_7 { private int num=10; public class Inner{ public void show(){ System.out.println(num); } // public void method(){ // Inner inner=new Inner(); // inner.show(); // } public static void main(String[] args){ // 方法一 demo6_7.Inner inner= new demo6_7().new Inner(); inner.show(); // 方法二 // demo6_7 demo6_7=new demo6_7(); // demo6_7.method(); } }
package chart6; public class demo6_7 { private int num=10; public class Inner{ public void show(){ System.out.println(num); } } public void method(){ Inner inner=new Inner(); inner.show(); } public static void main(String[] args){ // 方法一 // demo6_7.Inner inner= new demo6_7().new Inner(); // inner.show(); // 方法二 demo6_7 demo6_7=new demo6_7(); demo6_7.method(); } }
主函数想要调用内部类需要使用间接调用
调用逻辑:主函数->外部类.method()->内部类.show()
package chart6; import org.omg.CORBA.PUBLIC_MEMBER; public class Outer { private int num=10; int num2=20; public void method(){ class Inner{ public void show(){ System.out.println(num); System.out.println(num2); } }; // 创建内部类对象,并调用方法 Inner inner=new Inner(); inner.show(); }; public static void main(String[] args) { // TODO Auto-generated method stub Outer outer=new Outer(); outer.method(); } }
局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
格式:
new 类名或者接口名(){ 重写方法; }
样例前提:匿名内部类需要实现的接口
package chart6; public interface Inter { void show(); }
方法一:匿名内部类.show()方法
在method方法内部直接通过new定义一个Inter类,主函数想要调用内部类的show()需要在匿名内部类的尾部追加【.show()】才能实现,这样做,如果想重复调用,则实现起来繁琐。
调用逻辑:主函数->外部类.method()->内部类.show()【通过.show()直接调用】
package chart6; import com.sun.webkit.ContextMenu.ShowContext; public class Outer2 { public void method(){ // 方法一 new Inter(){ public void show(){ System.out.println("匿名内部类"); } }.show(); // 方法二 // Inter inter=new Inter(){ // public void show(){ // System.out.println("匿名内部类"); // } // }; // inter.show(); } public static void main(String[] args) { // TODO Auto-generated method stub Outer2 outer2=new Outer2(); outer2.method(); } }
方法二:类对象=匿名内部类
在method方法内部直接通过new定义一个Inter类,主函数想要调用内部类的show(),需要将匿名内部类赋值给一个对象变量,通过这个变量调用show方法
调用逻辑:主函数->外部类.method()->内部类变量.show()【内部类赋值给变量调用show()】
package chart6; import com.sun.webkit.ContextMenu.ShowContext; public class Outer2 { public void method(){ // 方法一 // new Inter(){ // public void show(){ // System.out.println("匿名内部类"); // } // }.show(); // 方法二 Inter inter=new Inter(){ public void show(){ System.out.println("匿名内部类"); } }; inter.show(); } public static void main(String[] args) { // TODO Auto-generated method stub Outer2 outer2=new Outer2(); outer2.method(); } }
1.内部类的访问特点?
2.成员内部类定义在哪里?
3.成员内部类如何实现调用?提示:方法一、方法二
4.局部内部类定义在哪里?
5.局部内部类如何实现调用?提示:方法一、方法二
6.匿名内部类本质?
7.匿名内部类如何实现调用?提示:方法一、方法二