ネスティドレベルwienerClass+ramです.
31703 ワード
いわゆるネストクラス
class Outer{ // 외부 클래스
class Nested{ ... } // 네스티드 클래스
}
Nestidクラスは静的および非静的に分類される。
// static이 붙은 네스티드 클래스
class OuterClass{
static class StaticNestedClass{ ... }
}
// static이 붙지 않은 네스티드 클래스 (이너 클래스)
class OuterClass{
class InnerNestedClass{ ... }
}
四種類のNested類
静的ネストクラス
class Outer{
private static int num=0;
static class Nested1{
// 외부 클래스의 private 변수 num에 직접 접근이 가능하다.
void add(int n) { num += n; }
}
static class Nested2{
vod get() { return num; }
}
}
class StaticNested{
public static void main(String[] args) {
Outer.Nested1 nst1 = new Outer.Nested1(); // static 네스티드 클래스의 접근
nst1.add(5);
Outer.Nested2 nst2 = new Outer.Nested2();
System.out.println(nst2.get());
}
}
メンバークラス
class Outer{
class MemberInner{ ... }
}
interface Printable{
void print();
}
class Papers{
private String con;
public Papers(String s) { con = s;}
public Printable getPrinter(){
return new Printer();
}
private class Printer implements Printable{
public void print(){
System.out.println(con);
}
}
}
public static void main(String[] args) {
Papers p = new Papers("서류 내용 : 행복합니다.");
Printable prn = p.getPrinter();
prn.print();
/** main함수에서는 Printer 클래스의 존재를 모르지만, 사용하고 있다. **/
}
ローカルクラス
class Outer{
void method(){
class LocalInner{ ... }
}
}
interface Printable{
void print();
}
class Papers{
private String con;
public Papers(String s) { con = s;}
public Printable getPrinter(){
/** 메소드 안으로 감추었다. **/
class Printer implements Printable{ // 클래스 이름이 불필요하다. -> 익명 클래스 등장
public void print(){
System.out.println(con);
}
}
return new Printer();
}
}
public static void main(String[] args) {
Papers p = new Papers("서류 내용 : 행복합니다.");
Printable prn = p.getPrinter();
prn.print();
/** main함수에서는 Printer 클래스의 존재를 모르지만, 사용하고 있다. **/
}
匿名クラス
interface Printable{
void print();
}
class Papers{
private String con;
public Papers(String s) { con = s;}
public Printable getPrinter(){
/** 익명 클래스 **/
return new Printable(){
public void print(){
System.out.println(con);
}
};
}
}
public static void main(String[] args) {
Papers p = new Papers("서류 내용 : 행복합니다.");
Printable prn = p.getPrinter();
prn.print();
}
ランダ
匿名クラスのコードの使用(Ramdaを使用しない)
interface Printable {
void print(String s);
}
class Lambda2 {
public static void main(String[] args) {
Printable prn = new Printable() {
@Override
public void print(String s) {
System.out.println(s);
}
}
}
}
以上のコードにはランダのコードが使用されています
interface Printable {
void print(String s);
}
class Lambda3{
public static void main(String[] args) {
Printable prn = (s) -> { System.out.println(s); };
prn.print("What is Lambda?");
}
}
???
-抽象的な方法は一つしかないから->できる.
##[解釈コード]
ランダの登場過程
1.一般クラスの使用
interface Printable {
void print(String s);
}
class Printer implements Printable {
@Override
public void print(String s) {
System.out.println(s);
}
}
class Lambda1{
public static void main(String[] args) {
Printable prn = new Printer();
prn.print("Understand Lambda 1");
}
}
2.匿名クラスの使用
interface Printable {
void print(String s);
}
class Lambda2 {
public static void main(String[] args) {
Printable prn = new Printable() {
@Override
public void print(String s) {
System.out.println(s);
}
}
};
prn.print("Understand Lambda 2");
}
3.匿名クラスで不要な部分は省略
interface Printable {
void print(String s);
}
class Lambda3{
public static void main(String[] args) {
Printable prn = (s) -> { System.out.println(s); };
prn.print("What is Lambda?");
}
}
[ソース]Reference
この問題について(ネスティドレベルwienerClass+ramです.), 我々は、より多くの情報をここで見つけました https://velog.io/@songyw0517/네스티드-클래스와-이너-클래스-람다テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol