一、成員內部類
成員內部類: 瞭解中的瞭解
- 概述:類中類
- 格式:
class A{ //外部類
...
class B{ //內部類
...
}
}
A對B來說,叫外部類
B類就是A的內部類
-
.注意:
內部類可以直接使用外部類的成員
外部類不能直接使用內部類成員 -
如何訪問內部類
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;
}
}