天天看點

Java中的有名内部類與匿名内部類

一、有名内部類

    1、定義方法

Java中的有名内部類與匿名内部類

        如圖、在Example類中定義了一個Test類,此時Test稱為有名内部類(因為該内部類有其名字),Example為其外部類

    2、作用

        内部類可以定義在類中的任何位置:

            一、當定義在成員變量的位置上:

                此時該内部類可以使用權限修飾符:public~private

            二、當定義在局部變量的位置上:

                此時該類不可以使用修飾符修飾;

            三、當類定義在含有局部變量的方法中:

                在JDK.8以下的版本要在形參中添加final修飾 

Java中的有名内部類與匿名内部類

   三、調用方法

      在定義的非靜态有名内部類在靜态方法中使用時;必須得建立對象進行調用:

public class Example {

	class Eat{//不可以直接在main方法中使用   必須建立對象
		void sleep() {
			
		}
	}
public static void main(String[] args) {
		Eat eat= new Example().new Eat();
	}
           

      可以看出想要必須建立Example對象才可以建立Eat對象

二、匿名内部類

    1、定義方法

Example example =new Example() {
			public void eat() {
				System.out.println("正在吃東西");
			}
		};
           

        此處定義的new Example();括号後面的部分相當于建立了一個子類(上轉型對象),其中可以對父類方法進行重寫而進行使用:

    2、作用

        一、定義在普通類

Java中的有名内部類與匿名内部類

        二、定義在抽象類

Java中的有名内部類與匿名内部類

        三、定義在接口類

Java中的有名内部類與匿名内部類

    3、使用方法

            一、在定義抽象類的内部類時必須全部實作其抽象方法,否則不可建立對象;

            二、可以在匿名内部類中添加新的屬性和方法,但是這些屬性和方法不能被上轉型對象所調用,隻能被非上轉型對象方式建立的匿名内部類對象所調用

public class Test {
	public void eat() {
		System.out.println("吃");
	}
	public static void main(String[] args) {
		Test test= new Test() {
			@Override
			public void eat() {
				System.out.println("喝");
			}
			int age=0;
		}.age=11;
		System.out.println(test.age);	
	}
           

                此時的test的新定義的屬性是不可以被上轉型使用的、要是想要調用,就需要在建立的對象後面使用.新屬性

三、建立内部類時在Workplace

    1、内部類建立新檔案

            在建立内部類的時候,會在自己的eclipse的工作區中自定生成帶有$(dollar)檔案,匿名類使用的是1,2.3代替其類名:

Java中的有名内部類與匿名内部類