Java面向?qū)ο笾畠?nèi)部類詳解
前言
在 Java 中,允許一個類的定義位于另一個類的內(nèi)部,前者稱為內(nèi)部類,后者稱為外部類。本篇博客將總結(jié)內(nèi)部類的使用。
內(nèi)部類概述
當一個事物的內(nèi)部,還有一個部分需要一個完整的結(jié)構(gòu)進行描述,而這個內(nèi)部的完整的結(jié)構(gòu)又只為外部事物提供服務,那么整個內(nèi)部的完整結(jié)構(gòu)最好使用內(nèi)部類。
在 Java 中,允許一個類的定義位于另一個類的內(nèi)部,前者稱為內(nèi)部類,后者稱為外部類。
內(nèi)部類一般用在定義它的類或語句塊之內(nèi),在外部引用它時必須給出完整的名稱。
內(nèi)部類的名字不能與包含它的外部類類名相同;
內(nèi)部類的分類
內(nèi)部類分為:
成員內(nèi)部類( static 成員內(nèi)部類和非 static 成員內(nèi)部類)
局部內(nèi)部類(方法內(nèi),代碼塊內(nèi),構(gòu)造器內(nèi))
成員內(nèi)部類
一方面,作為外部類的成員:
- 調(diào)用外部類的結(jié)構(gòu)。
- 可以被 static 修飾(注意里面只能調(diào)用靜態(tài)方法,靜態(tài)屬性)。
- 可以被4種不同的權(quán)限修飾。
另一方面,作為一個類:
- 類內(nèi)可以定義屬性、方法、構(gòu)造器等。
- 可以被final修飾,表示此類不能被繼承。
- 可以被 abstract 修飾。
class People{
String race;
String countries;
//靜態(tài)成員內(nèi)部類
static class Man{
String name;
public Man(){
}
public void display(){
System.out.println("3090yyds");
}
}
// 非靜態(tài)成員內(nèi)部類
class Women{
String name;
public Women(){
}
public void display(){
System.out.println("化妝");
}
}
}
如何實例化成員內(nèi)部類的對象
package 內(nèi)部類;
???????public class Demo {
public static void main(String[] args) {
//創(chuàng)建Man對象(靜態(tài)的成員內(nèi)部類)
People.Man m = new People.Man();
m.display();
//創(chuàng)建Women對象(非靜態(tài)的成員內(nèi)部類)
People p = new People();
People.Women w = p.new Women();
w.display();
}
}
如何在成員內(nèi)部類成員中區(qū)分調(diào)用外部類的對象
package 內(nèi)部類;
public class Demo {
public static void main(String[] args) {
//創(chuàng)建Women對象(非靜態(tài)的成員內(nèi)部類)
People p = new People();
People.Women w = p.new Women();
w.display("a");
}
}
class People{
String name = "niu";
String countries;
public void eat(){
System.out.println("吃飯");
}
// 非靜態(tài)成員內(nèi)部類
class Women{
String name = "aniu";
public Women(){
}
public void eat(){
System.out.println("吃蔬菜");
}
public void display(String name){
System.out.println("化妝");
System.out.println(name); //方法的形參
System.out.println(this.name); //內(nèi)部類的屬性
System.out.println(People.this.name); //外部類的屬性
this.eat(); //內(nèi)部類的方法
People.this.eat(); // 外部類的方法
}
}
}

局部內(nèi)部類
局部內(nèi)部類可以在方法內(nèi),代碼塊內(nèi),構(gòu)造器內(nèi)
class Animal{
// 局部內(nèi)部類
// 構(gòu)造器內(nèi)
Animal(){
class Dog{
}
}
// 代碼塊內(nèi)
{
class Cat{
}
}
// 方法內(nèi)
public void method(){
class Bird{
}
}
}開發(fā)中局部內(nèi)部類的使用
我們在開發(fā)中局部內(nèi)部類使用較多,比如,我們需要一個方法返回實現(xiàn)了某個接口的類的對象,此時方法內(nèi)自然就需要一個內(nèi)部類實現(xiàn)接口!
例:
// 返回一個實現(xiàn)了Comparable接口的類的對象
public Comparable getComparable(){
// 創(chuàng)建一個實現(xiàn)了Comparable接口的類 ---局部內(nèi)部類
class MyComparable implements Comparable{
@Override
public int compareTo(Object o) {
return 0;
}
}
return new MyComparable(); // 非匿名內(nèi)部類的匿名對象
}
或者是這樣
// 返回一個實現(xiàn)了Comparable接口的類的對象
public Comparable getComparable(){
return new Comparable() {
@Override
public int compareTo(Object o) {
return 0;
}
}; // 匿名內(nèi)部類的匿名對象到此這篇關于Java面向?qū)ο笾畠?nèi)部類詳解的文章就介紹到這了,更多相關Java內(nèi)部類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot配置項目啟動后自動打開瀏覽器訪問項目方式
這篇文章主要介紹了springboot配置項目啟動后自動打開瀏覽器訪問項目方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
在SpringBoot框架下實現(xiàn)Excel導入導出的方法詳解
SpringBoot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,今天我們就使用純前對按表格控件帶大家了解,如何在Spring Boot框架下實現(xiàn)Excel服務端導入導出,需要的朋友可以參考下2023-06-06

