四种内部类
来源:互联网 发布:淘宝客服薪资待遇 编辑:程序博客网 时间:2024/06/05 09:46
一、成员内部类
1.1 内部类概述和访问特点
* A:内部类概述
* B:内部类访问特点
* a:内部类可以直接访问外部类的成员,包括私有。
* b:外部类要访问内部类的成员,必须创建对象。
* 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
* private
2.1 静态成员内部类
* static
* B:成员内部类被静态修饰后的访问方式是:
* 外部类名.内部类名 对象名 = 外部类名.内部类对象;
* A:面试题
*
3.1 局部内部类访问局部变量的问题
* A:案例演示
* 局部内部类访问局部变量必须用final修饰
4.1 匿名内部类的格式和理解
* A:匿名内部类
* 就是内部类的简化写法。
* B:前提:存在一个类或者接口
* 这里的类可以是具体类也可以是抽象类。
* C:格式:
*
new 类名或者接口名(){
重写方法;
}
* D:本质是什么呢?
* 是一个继承了该类或者实现了该接口的子类匿名对象。
题目:
1.1 内部类概述和访问特点
* A:内部类概述
* B:内部类访问特点
* a:内部类可以直接访问外部类的成员,包括私有。
* b:外部类要访问内部类的成员,必须创建对象。
* 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
class Demo1_InnerClass {public static void main(String[] args) {//Inner i = new Inner();//i.method();//外部类名.内部类名 = 外部类对象.内部类对象Outer.Inner oi = new Outer().new Inner();//创建内部类对象oi.method();}}class Outer {private int num = 10;class Inner {public void method() {System.out.println(num);}}}1.2 成员内部类私有使用
* private
class Demo2_InnerClass {public static void main(String[] args) {//Outer.Inner oi = new Outer().new Inner();//oi.method();Outer o = new Outer();o.print();}}class Outer {private int num = 10;private class Inner {public void method() {System.out.println(num);}}public void print() {Inner i = new Inner();i.method();}}二、静态成员内部类
2.1 静态成员内部类
* static
* B:成员内部类被静态修饰后的访问方式是:
* 外部类名.内部类名 对象名 = 外部类名.内部类对象;
class Demo1_InnerClass {public static void main(String[] args) {//外部类名.内部类名 对象名 = 外部类名.内部类对象;Outer.Inner oi = new Outer.Inner();oi.method();Outer.Inner2.print();}}class Outer {static class Inner {public void method() {System.out.println("method");}}static class Inner2 {public static void print() {System.out.println("print");}}}2.2 成员内部类的面试题
* A:面试题
*
//要求:使用已知的变量,在控制台输出30,20,10。//内部类之所以能获取到外部类的成员,是因为他能获取到外部类的引用外部类名.thisclass Outer {public int num = 10;class Inner {public int num = 20;public void show() {int num = 30;System.out.println(?);System.out.println(??);System.out.println(???);//System.out.println(num);//System.out.println(this.num);//System.out.println(Outer.this.num);}}}class InnerClassTest {public static void main(String[] args) {Outer.Inner oi = new Outer().new Inner();oi.show();}}三、局部内部类
3.1 局部内部类访问局部变量的问题
* A:案例演示
* 局部内部类访问局部变量必须用final修饰
* 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
class Demo1_InnerClass {public static void main(String[] args) {Outer o = new Outer();o.method();}}//局部内部类class Outer {public void method() {final int num = 10;class Inner {public void print() {System.out.println(num);}}Inner i = new Inner();i.print();}/*public void run() {Inner i = new Inner();//局部内部类,只能在其所在的方法中访问i.print();}*/}四、匿名内部类
4.1 匿名内部类的格式和理解
* A:匿名内部类
* 就是内部类的简化写法。
* B:前提:存在一个类或者接口
* 这里的类可以是具体类也可以是抽象类。
* C:格式:
*
new 类名或者接口名(){
重写方法;
}
* D:本质是什么呢?
* 是一个继承了该类或者实现了该接口的子类匿名对象。
class Demo1_NoNameInnerClass {public static void main(String[] args) {Outer o = new Outer();o.method();}}interface Inter {public void print();}class Outer {class Inner implements Inter {public void print() {System.out.println("print");}}public void method(){//Inner i = new Inner();//i.print();//new Inner().print();//Inter i = new Inner();//父类引用指向子类对象new Inter() {//实现Inter接口public void print() {//重写抽象方法System.out.println("print");}}.print();}}4.2 匿名内部类重写多个方法调用
class Demo2_NoNameInnerClass {public static void main(String[] args) {Outer o = new Outer();o.method();}}interface Inter {public void show1();public void show2();}//匿名内部类只针对重写一个方法时候使用class Outer {public void method() {/*new Inter(){public void show1() {System.out.println("show1");}public void show2() {System.out.println("show2");}}.show1();new Inter(){public void show1() {System.out.println("show1");}public void show2() {System.out.println("show2");}}.show2();*/Inter i = new Inter(){public void show1() {System.out.println("show1");}public void show2() {System.out.println("show2");}/*public void show3() {System.out.println("show3");}*/};i.show1();i.show2();//i.show3();//匿名内部类是不能向下转型的,因为没有子类类名}}4.3 匿名内部类在开发中的应用
题目:
//这里写抽象类,接口都行abstract class Person {public abstract void show();}class PersonDemo {public void method(Person p) {p.show();}}class PersonTest {public static void main(String[] args) {//如何调用PersonDemo中的method方法呢?PersonDemo pd = new PersonDemo ();}}答案:
class Test1_NoNameInnerClass {public static void main(String[] args) {//如何调用PersonDemo中的method方法呢?PersonDemo pd = new PersonDemo ();//pd.method(new Student());pd.method(new Person() {public void show() {System.out.println("show");}});}}//这里写抽象类,接口都行abstract class Person {public abstract void show();}class PersonDemo {//public void method(Person p) {//Person p = new Student();//父类引用指向子类对象/*Person p = new Person(){public void show() {System.out.println("show");}};*/public void method(Person p) {p.show();}}class Student extends Person {public void show() {System.out.println("show");}}4.4 匿名内部类的面试题
//按照要求,补齐代码interface Inter { void show(); }class Outer { //补齐代码 }class OuterDemo {public static void main(String[] args) { Outer.method().show(); }}//要求在控制台输出”HelloWorld”答案:class Test2_NoNameInnerClass {public static void main(String[] args) {//Outer.method().show();//链式编程,每次调用方法后还能继续调用方法,证明调用方法返回的是对象Inter i = Outer.method();i.show();}}//按照要求,补齐代码interface Inter { void show(); }class Outer { //补齐代码 public static Inter method() {return new Inter() {public void show() {System.out.println("show");}};}}
阅读全文
0 0
- 四种内部类
- 四种内部类
- 四种内部类
- java四种内部类详解
- 四种内部类分析
- java四种内部类
- java四种内部类详解
- java四种内部类详解
- 浅谈四种内部类
- java 四种内部类区别
- java四种内部类详解
- Java四种内部类详解
- java四种内部类
- Java中的四种内部类
- Java 四种内部类
- java四种内部类详解
- java四种内部类详解
- Java四种内部类
- Linux使用vim编辑器创建文本文件
- Linux私房菜学习-第7章Linux文件与目录管理
- CodeForces 892B Wrath
- How To Completely Remove 360 Total Security From Windows 7 and 8
- Shell常用命令与工具(二)
- 四种内部类
- 树的创建及层序先中后序遍历
- 服务器(Linux server/Win server)常用端口介绍
- [apue]UNIX高级环境编程ver3勘误表[持续更新]
- 操作系统处理机调度算法模拟实现
- jqgrid is not a function
- nitoj_244_很有意思的贪心
- 正则表达式
- Unity加载资源的3种方法