内部类
九、内部类 奇葩代码
内部类就是在一个类的内部定义一个类,比如A类中定义一个B类,那么B类相对于A类来说就被称为内部类,或者说B类就是A累的内部类,二A类相对B类就是外部类。
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
- lambada的补充
成员内部类:
package oop.Demo10;
import javax.sound.midi.Soundbank;
public class Outer {
private int id = 10;
public void out(){//外部类的方法
System.out.println("这是外部类的方法 ");
}
//再定义一个类 - 内部类
public class Inner {//如果这个内部类加上static,就无法拿到private外部类的id,除非把外部类也改成static
public void in() { //内部类的方法
System.out.println("这是内部类的方法");
}
//获得外部类Outer的私有属性id
public void getID(){
System.out.println(id);
}
}
}
package oop;
import oop.Demo10.Outer;
public class Application {
public static void main(String[] args) {
//对外部类 - new
Outer outer = new Outer();
//对内部类 - 通过这个外部类来实例化内部类 - 先访问Outer再Inner,所以是Outer.Inner
Outer.Inner inner = outer.new Inner(); //成员内部类
inner.in(); //成功输出:这是内部类的方法
inner.getID(); //成功输出:10
}
}
静态内部类: +static
如果一个内部类加上修饰符static,就无法拿到 private外部类 的属性,除非把外部类也改成static
一个java类中可以有多个class类,但只能有一个public class类
package oop.Demo10;
import javax.sound.midi.Soundbank;
public class Outer {
}
//一个java类中可以有多个class类,但只能有一个public class类
class A{
}
局部内部类:
package oop.Demo10;
import javax.sound.midi.Soundbank;
public class Outer {
//局部内部类
public void method(){
class Inner{ //class类写哪里都可以!
public void in(){
}
}
}
}
重写接口:
package oop.Demo10;
public class Test {
public static void main(String[] args) {
/*Apple apple = new Apple(); //这是实例化,有名字
*/
//没有名字初始化类,不用将实例保存到变量中
new Apple().eat();
UserService userService = new UserService(){
@Override
public void hello() {
}
};
}
}
class Apple{
public void eat(){
System.out.println("`");
}
}
interface UserService{
void hello();
}
面向对象OOP主要在思想!

浙公网安备 33010602011771号