Java–内部类
package com.zy.oop;
/**
*description: Java--内部类
*@program: 基础语法
*@author: zy
*@create: 2023-02-22 22:40
*/
public class Outer {
private int id;
public void out(){
/*Inner inner = new Inner();
inner.in();*/
System.out.println("这是外部类的方法");
}
// 一个项目应该只存在一个main方法
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.in();
inner.getId();
System.out.println("========================");
Outer.Inner2.in();
System.out.println("========================");
outer.methodClass();
System.out.println("========================");
// 没有名字初始化类,不用将实例保存到变量中,引申出匿名内部类
new Outer2().out();
System.out.println("========================");
HelloService helloService = new HelloService() {
@Override
public void hello() {
System.out.println("匿名内部类说你好");
}
};
helloService.hello();
}
public void methodClass(){
/**
* @Description 局部内部类
* @author zy
* @date 2023-2-22 22:56
*/
class Inner3 {
public void in(){
out();
System.out.println("这是局部内部类的方法");
}
}
Inner3 inner3 = new Inner3();
inner3.in();
}
/**
* @Description 成员内部类:通过外部类实例化内部类
* @author zy
* @date 2023-2-22 22:44
*/
class Inner {
public void in(){
out();
System.out.println("这是成员内部类的方法");
}
// 获得外部类的私有属性
public int getId(){
return id = 10;
}
}
/**
* @Description 静态内部类
* @author zy
* @date 2023-2-22 22:50
*/
static class Inner2 {
public static void in(){
//out(); // 无法直接调用外部类方法,除非其是静态的
System.out.println("这是静态内部类的方法");
}
// 无法直接获得外部类的私有属性,除非该属性是静态的
public int getId(){
return 0; //id = 10;
}
}
}
/**
* @Description
* 一个Java类中可以有多个class类,但只能有一个public修饰的类
* @author zy
* @date 2023-2-22 22:54
*/
class Outer2 {
public void out(){
System.out.println("这是外部类2的方法");
}
}
interface HelloService {
void hello();
}