1.成员内部类。类A中定义另一个类B,类B定义的方法中可以访问类A的私有属性。
package com.oop.demo10;
public class Application {
public static void main(String[] args) {
System.out.println();
new Outer().getId();
Outer o1 = new Outer();
o1.getId();
Outer.Inner i1 = o1.new Inner();
i1.innerPrint();
i1.setId(19);
i1.innerPrint();
}
}
package com.oop.demo10;
public class Outer {
private int id = 10;
public int getId() {
System.out.println(id);
return id;
}
public void setId(int id) {
this.id = id;
}
//成员内部类
public class Inner{
private int id = 11;
public int getId() {
return id;
}
public void setId(int id) {
Outer.this.id = id;
}
public void innerPrint(){
System.out.println(id);
System.out.println(Outer.this.id);
}
}
}
2. 一个类文件中可以写多个类的定义,但是只能有一个public class
package com.oop.demo10;
public class Application {
public static void main(String[] args) {
OuterTwice outerTwice = new OuterTwice();
System.out.println(outerTwice.getId());
A a = new A();
System.out.println(a.getId());
}
}
package com.oop.demo10;
public class OuterTwice {
private int id = 10;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
//类文件中定义的另一个类,不能是public class
class A{
private int id = 11;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
3. 类定义的文件中,可以定义interface, 类的定义中可以new interface!这个“new的interface"实际上是实现了这个接口的一个内部类。
package com.oop.demo10;
public class OuterTwice {
private int id = 10;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
interfacetest i2 = new interfacetest() {
@Override
public void test1() {
}
};
}
class A{
private int id = 11;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
interfacetest i1 = new interfacetest() {
@Override
public void test1() {
}
};
}
interface interfacetest{
void test1();
}
4. static成员类,可以访问外部类的static成员
package com.oop.demo10;
public class Application {
public static void main(String[] args) {
OuterThird outerThird = new OuterThird();
System.out.println(outerThird.getId());
OuterThird.inner3 inner3 = new OuterThird.inner3();
System.out.println(inner3.getid());
inner3.printInner();
}
}
package com.oop.demo10;
public class OuterThird {
private int id = 100;
private static int id2 = 102;
public int getId() {
return id;
}
//内部静态类
public static class inner3{
private int id = 101;
public int getid(){
return this.id;
}
public void printInner(){
System.out.println(OuterThird.id2);
}
}
}
5. 类的method中也可以定义class,局部内部类
package com.oop.demo10;
public class outerForth {
private int id = 201;
public void outer4(){
class B{
private int id = 202;
public void getId() {
System.out.println(id);
System.out.println(outerForth.this.id);
}
public void setId(int id) {
this.id = id;
}
}
}
}
6. 没有名字的对象
package com.oop.demo10;
public class Application {
public static void main(String[] args) {
//类的实例化没有名字,直接调用方法
new Orange().print();
}
}
package com.oop.demo10;
public class OuterFifth {
}
class Orange{
public void print(){
System.out.println("This is an orange.");
}
}