内部类
内部类分为: 成员内部类、静态嵌套类、匿名内部类(直接new 抽象类,直接new 接口)$1 $2。
如果是函数式接口,可以使用lambda表达,这样可以避免new 接口产生内部匿名类
-
内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号;
-
内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的;
-
外部类不能直接访问其内部类,想要访问内部类,需实例化内部类;
-
内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量;
-
其他类想要直接访问内部类,可直接实例化内部类,方法如下
外部类名.内部类 对象名 = new 外部类().new 内部类();
例:
Out.In in = new Out().new In();
如果内部类是静态的,当其他类调用内部类可直接通过类名调用,格式如下:
外部类.内部类 对象名 = new 外部类.内部类();
例:
Out.In in2 = new Out.In();
当内部类是静态的,且方法也是静态的,此时可不需实例化对象
外部类.内部类.静态方法名();
例:
Out.In.fun();
System.out.print();
Outter.java
/*
* Copyright (c) 2017, 2023, zxy.cn All rights reserved.
*
*/
package cn.practice2;
/**
* <p>Description:内部类</p>
* <p>Class:</p>
* <p>Powered by zxy On 2023/5/16 19:50 </p>
*
* @author zxy [zxy06291@163.com]
* @version 1.0
* @since 17
*/
public class Outter {
//成员 public 静态的内部类
public static class out{
public static void println(Object obj){
System.out.println(obj);
}
}
class Demo{
}
public static void main(String[] args) {
out.println("hello world 中文效果");
System.out.println("hello world 中文效果");
//方法体,代码中,局部内容类
//@Data
class Book {
private int id;
private String name;
}
}
}
Test.java
/*
* Copyright (c) 2017, 2023, zxy.cn All rights reserved.
*
*/
package cn.practice2;
/**
* <p>Description:</p>
* <p>Class:</p>
* <p>Powered by zxy On 2023/5/16 19:52 </p>
*
* @author zxy [zxy06291@163.com]
* @version 1.0
* @since 17
*/
public class Test {
public static void main(String[] args) {
Outter.Demo demo = new Outter().new Demo();
//System.out.println(demo);
Outter.out.println(demo);
}
}
Demo.java
/*
* Copyright (c) 2017, 2023, zxy.cn All rights reserved.
*
*/
package cn.practice2;
/**
* <p>Description:类 对象(实例对象) new实例化对象(对象可以使用)</p>
* <p>Class:</p>
* <p>Powered by zxy On 2023/4/17 20:25 </p>
*
* @author zxy [zxy06291@163.com]
* @version 1.0
* @since 17
*/
public class Demo {
public static void main(String[] args) {
//类 对象(实例对象) new实例化对象(对象可以使用)
User u = new User();
Teacher t = new Teacher();
User.Book book = new User(). new Book();
//User.Book book1 = u.new Book();
}
}