三つのjava内部クラスとその応用シーン
25817 ワード
:
, .class ,
$
,
, , private。
(1)メンバー内部クラスimport IO_liu.Outer.Inner;
public class IO_liu {
public static void main(String[] args) {
//
// , ,
// Outer o = new Outer();
// o.method();
//
Outer.Inner cry = new Outer().new Inner();
cry.function();
}
}
class Outer{
//
private String num = " ";
public void method() {
//
Inner i = new Inner();
i.function();
System.out.println(" ");
}
class Inner{
public void function() {
System.out.println(" !"+num);
}
}
}
メンバー内部のprvateの飾り付けに注意する点:package IO_liu;
import IO_liu.Outer.Inner;
// :
// , private ,
public class com {
public static void main(String[] args) {
// , ,
Outer2.Inner2 i = new Outer2().new Inner2();
}
}
class Outer2{
public void method() {
Inner2 i = new Inner2();
}
// public, private,
private class Inner2{
public void function() {
System.out.println("function");
}
}
}
staticを使ってメンバー内部を修飾する:public class com {
public static void main(String[] args) {
// ,
// ,
Outer2.Inner2.function();
}
}
class Outer2{
public void method() {
Inner2 i = new Inner2();
}
// public, private,
static class Inner2{
public static void function() {
System.out.println("function");
}
}
}
(2)局所内部類// , ,
//
public class com {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
class Outer {
public void method() {
class Inner{
public void function() {
System.out.println("function");
}
}
Inner inner = new Inner();
inner.function();
}
public void test() {
}
}
(3)匿名内部クラスの2つのフォーマットのうち、最初のフォーマットは対象として一度に使うしかないです。package IO_liu;
/*
*
*
*
* :
* new / (){
* ,
* ,
* };
* :
*/
public class com {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
//
interface Inner{
public void function();
}
class Outer{
public void method() {
//
new Inner() {
@Override
public void function() {
System.out.println(" , ");
}
}.function();
}
}
もう一つのフォーマット:複数の呼び出しが可能です。package IO_liu;
/*
*
*
*
* :
* new / (){
* ,
* ,
* };
* :
*/
public class com {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
//
interface Inner{
public void function();
}
class Outer{
public void method() {
//
Inner i = new Inner() {
@Override
public void function() {
System.out.println(" , ");
}
};
//
i.function();
i.function();
}
}
匿名の内部クラスの役割:package IO_liu;
/*
*
* :
*
*/
public class com {
public static void main(String[] args) {
method(new Dog());
method(new cat());
}
public static void method(Animal a) {
a.eat();
}
}
package IO_liu;
public interface Animal {
public abstract void eat();
}
package IO_liu;
public class Dog implements Animal{
@Override
public void eat() {
System.out.println(" ");
}
}
package IO_liu;
public class cat implements Animal{
@Override
public void eat() {
System.out.println(" ");
}
}