Java基础-内部类与匿名内部类总结笔记

Java基础-内部类与匿名内部类总结笔记

角度

  • Java基础-内部类与匿名内部类总结笔记
    • 定义
    • 创建内部类对象
    • 访问权限
    • private修饰的内部类
    • 匿名内部类

定义

/*外部类*/
class Out {
    
    /*内部类*/
    class Inner{
    }

}

如图,Inner为内部类,把一个类定义到另一个类中,那么内部的类就是内部类

创建内部类对象

语法:

外部类.内部类 变量名 = new 外部类对象.new内部类对象

/*外部类*/
class Outer {

    /*内部类*/
    class Inner{
    }

}
public class Out{
    public static void main(String[] args) {
        /*创建内部类对象*/
        Outer.Inner in = new Outer().new Inner() ; 
    }
}

访问权限

  • 外部类可以直接创建内部类的对象
  • 内部类的方法可以访问外部类的属性和方法
  • 外部类的方法如果想要访问内部类的方法和属性,必须创建内部类的对象,根据内部类的对象来访问
/*外部类*/
class Outer {
 int no = 0  ;
 public void Outmethod(){
     System.out.println("外部类方法");
     Inner inner = new Inner() ; /*创建内部类对象*/
     System.out.println(inner.in_no); /*访问内部类对象的属性值*/
    // inner.Inmethod();           /*调用内部类方法*/
     System.out.println("*****************************");
 }
    /*内部类*/
    class Inner{
        int in_no = 1 ;
        public  void  Inmethod(){
            System.out.println("内部类方法");
           // Outmethod();/*调用外部类方法*/
            System.out.println(no);/*访问外部类属性*/
            System.out.println("*****************************");

        }
    }
}
public class Out{
    public static void main(String[] args) {
        /*创建内部类对象*/
        Outer.Inner in = new Outer().new Inner() ;
        in.Inmethod();
        Outer outer = new Outer() ;
        outer.method();
    }
}


内部类方法
0
*****************************
外部类方法
1
*****************************

private修饰的内部类

被private修饰的内部类只能在它所属的外部类中访问

匿名内部类

什么是匿名类:没有名字的类,这种类需要在接口上实现

匿名类和匿名内部类都需要接口或者抽象类的支持

具体怎么样请看代码

/*接口*/
interface Teacher{

    public  void  teach() ;
}
/*接口的实现类*/
class  JavaTeacher implements  Teacher {
    public  void  teach(){

    }
}

public  class  Out{
    public static void main(String[] args) {
        Teacher jt = new JavaTeacher() ;/*常规实现接口*/
        /*-------------匿名内部类----------------*/
        
        /*写法一 ->允许多次使用*/
       Teacher t = new Teacher() {/*大括号中就是匿名内部类·*/
            @Override
            public void teach() {
                System.out.println("实现接口的方法");
            }
        } ;
        t.teach();

        /*写法二  ->一次性使用*/
        new Teacher() {
            @Override
            public void teach() {
                System.out.println("实现接口的方法");
            }
        }.teach();

    }
}

你可能感兴趣的:(Java基础)