内部类的学习2

java 复制代码
package oop.innerclass.a03innerclassdemo03;

public class Outer {
    private int a=10;
    class Inner{
        private int a=20;
        public void show(){
            int a=30;
            System.out.println(a);//30
            System.out.println(this.a);//20
            System.out.println(Outer.this.a);
        }
    }
}
package oop.innerclass.a03innerclassdemo03;

public class Test {
    public static void main(String[] args) {
        Outer.Inner oi=new Outer().new Inner();
        oi.show();
    }
}

静态内部类

静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。

创建静态内部类对象的格式:

外部类名.内部类名 对象名=new 外部类名.内部类名();

java 复制代码
package oop.innerclass.a04innnerclassdemo04;

public class Outer {
    int a=10;
    static int b=20;
    static class Inner{
        public void show1(){
            System.out.println("非静态的方法");
           Outer o=new Outer();
            System.out.println(o.a);
            System.out.println(b);
        }
        public static void show2(){
            System.out.println("静态的方法");
            Outer o=new Outer();
            System.out.println(o.a);
            System.out.println(b);
        }
    }
}
package oop.innerclass.a04innnerclassdemo04;

public class Test {
    public static void main(String[] args) {
Outer.Inner oi=new Outer.Inner();
oi.show1();
Outer.Inner.show2();
    }
}

局部内部类:将内部类定义在方法里面就叫局部内部类,类似于方法里面的局部变量。

外界无法直接使用,需要在方法内部创建对象并使用。

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

java 复制代码
package oop.innerclass.a05innerclassdemo05;

public class Outer {
    int b=20;
   public void show(){
       int a=10;
       //局部内部类
       class inner{
String name;
int age;
public void method1(){
    System.out.println(a);
    System.out.println(b);
    System.out.println("局部内部类中的method1方法");
}
          // public static void method2(){
           //    System.out.println("局部内部类中的method2静态方法");
         //  }
       }
      //创建局部内部类的对象
       inner i=new inner();
       System.out.println(i.name);
       System.out.println(i.age);
       i.method1();
   }
}
package oop.innerclass.a05innerclassdemo05;

public class Test {
    public static void main(String[] args) {
Outer o=new Outer();
o.show();
    }
}

匿名内部类:本质上就是隐藏了名字的内部类。

格式:

new 接口名或类名(){

重写方法;

};

java 复制代码
package oop.innerclass.a06innerclassdemo06;

public abstract class Animal {
    public abstract void eat();
}
package oop.innerclass.a06innerclassdemo06;

public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}package oop.innerclass.a06innerclassdemo06;

public interface Swim {
    public abstract void swim();
}
package oop.innerclass.a06innerclassdemo06;

public class Test {
    public static void main(String[] args) {
new Swim(){

    @Override
    public void swim() {
        System.out.println("重写了游泳的方法");
    }
};
//Dog d=new Dog();
//method(d);
method(
    new Animal(){

        @Override
        public void eat() {
            System.out.println("狗吃骨头");
        }
    }
    );
new Animal(){

    @Override
    public void eat() {
        System.out.println("重写eat方法");
    }
};
    }
    public static void method(Animal a){
        a.eat();
    }
}
package oop.innerclass.a06innerclassdemo06;

public class Test2 {
    public static void main(String[] args) {
 Swim s=   new Swim(){

        @Override
        public void swim() {
            System.out.println("重写之后的swim方法");
        }
    };
 s.swim();
        new Swim(){
            @Override
            public void swim() {
                System.out.println("重写之后的swim方法");
            }
        }.swim();
    }
}

使用场景:

当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。

相关推荐
zhangzeyuaaa6 分钟前
# Python 抽象类(Abstract Class)
开发语言·python
墨^O^7 分钟前
并发控制策略与分布式数据重排:锁机制、Redis 分片与 Spark Shuffle 简析
java·开发语言·c++·学习·spark
丶小鱼丶7 分钟前
数据结构和算法之【阻塞队列】上篇
java·数据结构
zb200641208 分钟前
MySQL——表操作及查询
java
不被定义的~wolf8 分钟前
qt小游戏——坦克大作战
开发语言·qt
人道领域8 分钟前
LeetCode【刷题日记】:滑动窗口算法详解:从暴力法到最优解
java·算法·leetcode
迷藏49410 分钟前
# 发散创新:用Locust实现高并发场景下的精准压力测试实战在现代微服务架构中,**系统稳定性与性能瓶颈的识别能力直接决定了产品上线后
java·python·微服务·架构·压力测试
一晌小贪欢12 分钟前
Web 自动化指南:如何用 Python 和 Selenium 解放双手
开发语言·前端·图像处理·python·自动化·python办公
问水っ15 分钟前
Qt Creator快速入门 第三版 第7章 Qt对象模型与容器类
开发语言·qt