内部类

内部类

  • 内部类就是一个在类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就成为内部类,而A类为B类的外部类

  • 内部类编译之后,可以生成独立的字节码文件(class文件)

  • 内部类可以直接访问外部类的私有成员,而不破坏封装

  • 当内部类、外部类存在重名属性时,会优先访问内部类属性
  • 成员内部类不能定义静态成员
  1. 成员内部类

  • 在类的内部定义,与实例变量、实例方法同级别的类

  • 外部类的一个实例部分,要先创建外部类对象,才能够创建内部类对象

   2.静态内部类

  • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员。相当于一个外部类

  3.局部内部类

  • 定义在外部类的方法中,作用范围和创建对象仅限于当前写法

  • 不能加任何访问修饰符

  4.匿名内部类

  • 没有类名的局部内部类(一切特征都与局部内部类相同)

  • 必须继承一个父类或者实现一个接口

 

成员内部类:

package com.oop;

import com.oop.demo08.Outer;

public class Application {
    public static void main(String[] args) {
     //1.创建外部类对象 Outer outer
= new Outer();
     //2.创建内部类对象 Outer.Inner inner
= outer.new Inner(); inner.in(); inner.getID(); } } package com.oop.demo08; //讲的是成员内部类 public class Outer { private int id=10; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ public void in(){ System.out.println("这是内部类的方法"); } //获得外部类的私有属性 public void getID(){ System.out.println(id); } } }

 静态内部类:

package com.oop;

import com.oop.demo08.Outer;

public class Application {
    public static void main(String[] args) {
        //创建静态内部类对象
        Outer.Inner inner = new Outer.Inner();
        inner.show();
        inner.in();

    }

}


package com.oop.demo08;
//讲的是成员内部类
public class Outer {
    private int id=10;
    public void out(){
        System.out.println("这是外部类的方法");
    }
    //静态内部类:和外部类同级
    public static class Inner{
        private static int count=50;
        public void in(){
            System.out.println("这是内部类的方法");
        }
        //获得外部类的私有属性
        public void show(){
            //调用外部类对象属性和方法
            //1.先创建外部类对象
            Outer outer = new Outer();
            //2.调用外部类对象的属性和方法
            System.out.println(outer.id);
            outer.out();
            //调用静态内部类的属性和方法
            System.out.println(count);
        }
    }
}
局部内部类
package
com.oop; import com.oop.demo08.Outer; public class Application { public static void main(String[] args) { //创建静态内部类对象 Outer outer = new Outer(); outer.out(); } } package com.oop.demo08; //讲的是成员内部类 public class Outer { private int id=10; public void out(){ //局部内部类:不能加任何访问修饰符 class Inner{ //局部内部类的属性和方法 private int count=50; public void show(){ //调用外部类对象属性和方法 System.out.println(id); //调用静态内部类的属性 System.out.println(count); } } //创建局部类对象 Inner inner = new Inner(); inner.show(); } }

 

匿名内部类:

package com.oop;

import com.oop.demo08.Usb;

public class Application{
    public static void main(String[] args) {
        //使用匿名内部类(相当于创建了一个局部内部类)
        Usb usb = new Usb() {
            @Override
            public void service() {
                System.out.println("连接电脑成功,开始工作");
            }
        };
        usb.service();



    }
}


package com.oop.demo08;

public interface Usb {
    public void service();
}

 

posted @ 2022-04-16 21:39  胖虎9  阅读(50)  评论(0)    收藏  举报