JAVA内部类

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.");
}
}

posted @ 2020-11-29 23:17  浪淘  阅读(87)  评论(0)    收藏  举报