java基礎——內部類和匿名內部類

一、成員內部類

成員內部類: 瞭解中的瞭解

  1. 概述:類中類
  2. 格式:
class A{ //外部類
	...	
	class B{ //內部類
		...	
	}
}
A對B來說,叫外部類
B類就是A的內部類
  1. .注意:
    內部類可以直接使用外部類的成員
    外部類不能直接使用內部類成員

  2. 如何訪問內部類
    1.先創建外部類對象
    2.根據外部類的對象去創建內部類對象
    3.調用內部類的成員

  • 格式:
外部類名.內部類名 對象名 = new 外部類型().new 內部類型();

二、匿名內部類

1.創建子類繼承父類
2.重寫抽象方法
3.創建子類對象
4.調用重寫的方法

匿名內部類:利用一個格式,4合1

    new 父類/接口(){
        重寫方法
    }.重寫的方法;
注意:即使我們利用匿名內部類new的抽象類或者接口,實際上指向的是子類或實現類對象

使用場景:如果一個抽象類或者一個接口中的方法只調用一次,我們就沒必要去單獨創建一個子類、實現類(一般用於抽象類和接口)

三、類使用中的一些性質

1、普通類作爲方法的參數和返回值

傳遞的是地址值

2、接口作爲方法的參數和返回值

傳遞和返回的都是實現類對象

public interface Usb {
    void open();
    void close();
    Usb getUsb();
}
public class Mouse implements Usb{
    @Override
    public void open() {
        System.out.println("打開鼠標");
    }

    @Override
    public void close() {
        System.out.println("關閉鼠標");
    }

    @Override
    public Usb getUsb() {
        return new Mouse();
    }
}
public class Test {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        method(mouse);
        System.out.println("--------------------------------------------");
        method01().open();
        method01().close();
        System.out.println("--------------------------------------------");
        // 內部類方式
        Usb usb = new Usb() {
            @Override
            public void open() {
                System.out.println("匿名打開鼠標");
            }

            @Override
            public void close() {
                System.out.println("匿名關閉鼠標");
            }

            @Override
            public Usb getUsb() {
                return new Mouse();
            }
        };
        usb.open();
        usb.close();
        System.out.println(usb.getUsb());
    }

	// 接口作爲參數
    public static void method(Usb usb){
        usb.open();
        usb.close();
    }
	
	//接口作爲返回值
    public static Usb method01(){
        return new Mouse();
    }
}

3、抽象類作爲方法的參數和返回值

傳遞和返回的是子類的對象

public abstract class Person {
    public abstract void eat();
}
public class Teacher extends Person {
    @Override
    public void eat() {
        System.out.println("老師喫龍蝦");
    }
}
public class Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        // 多態
        method(teacher);

        // 多態,父類引用指向子類對象
        Person person = method02();
        person.eat();
    }

    public static void method(Person person){
        person.eat();
    }

    public static Person method02(){
        Teacher teacher = new Teacher();
        return teacher;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章