Java 內部類
什麼是內部類
在類的內部定義另一個類。定義就這麼簡單。如果在類Outer的內部再定義一個類Inner,此時Inner就稱為內部類,而Outer則稱為外部類。內部類的定義格式如下:
public class 外部類的名稱{
//外部類的成員
public class 內部類的名稱{
//內部類的成員
}
}
內部類優缺點
使用內部類的優點:
1)實現多重繼承;
2)內部類可以很好的實現隱藏:一般的非內部類,是不允許有 private 與protected許可權的,但內部類可以
3)減少了類檔案編譯後的產生的位元組碼檔案的大小
使用內部類的缺點:使程式結構不清楚。
內部類的種類:
成員內部類、靜態內部類、區域性內部類、匿名內部類
成員內部類
1、成員內部類也叫例項內部類。應用場合:每一個外部類物件都需要一個內部類的例項,內部類離不開外部類存在(相當於心臟對人體)
2、成員內部類的特徵:
作為外部類的一個成員存在,與外部類的屬性、方法並列成員內部類持有外部類的引用,成員內部類中不能定義static變數和方法
3、使用格式:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
示例程式碼一
public class Body {
String arm;
String leg;
String blood;
public Body(String arm, String leg, String blood) {
super();
this.arm = arm;
this.leg = leg;
this.blood = blood;
}
//內部類Heart
class Heart{
String name;
void work() {
System.out.println("心臟正在給"+arm+leg+"輸"+blood);
}
};
}
public class BodyTest {
public static void main(String[] args) {
Body body=new Body("兩個胳膊","兩條腿","血");
Body.Heart heart=body.new Heart();
heart.work();
}
}
示例程式碼二
public class Outer {
private String name="Hello World";
public class Inner{
public void print(){
System.out.println(name);
}
};
public void print(){//定義外部類方法
new Inner().print();//通過內部類的例項化物件呼叫方法
}
public static void main(String[] args) {
Outer outer=new Outer();
outer.print();//呼叫外部類的方法
}
}
靜態內部類
1、內部類如果使用static宣告,則此內部類就稱為靜態內部類。(其實也相當於外部類)可以通過外部類 . 內部類來訪問。
2、靜態內部類使用場合:內部類不需要外部類的例項(注意區分成員內部類),靜態內部類存在僅僅為外部類提供服務或者邏輯上屬於外部類,且邏輯上可以單獨存在。
3、靜態內部類的特徵:
靜態內部類不會持有外部類的引用,靜態內部類可以訪問外部的靜態變數,如果訪問外部類的成員變數必須通過外部類的例項訪問
4、Java中只有內部類才可以是靜態的
使用格式:Outer.Inner inner = new Outer.Inner();
public class Company {
String companyNam;
static String country;
static class Clear{
String name;
public Clear() {
// TODO Auto-generated constructor stub
}
public Clear(String name) {
super();
this.name = name;
}
public void work(String name){
String s = new Company().companyNam = "蘋果公司";
country="中國";
System.out.println(name+"為"+s+"工作,該公司屬於"+country);
}
}
}
public class CompanyTest {
public static void main(String[] args) {
Company.Clear c = new Company.Clear();
c.work("Alex");
}
}
區域性內部類
1、區域性內部類也叫區域內嵌類,區域性內部類與成員內部類類似,不過,區域內嵌類是定義在一個方法中的內嵌類。
2、使用場合:如果內部類物件僅僅為外部類的某個方法使用,使用區域性內部類
3、特徵:
○用在方法內部,作用範圍僅限於該方法中
○根據情況決定持有外部類物件引用
○不能使用private,protected,public修飾符
○不能包含靜態成員
示例程式碼
public class School {
String schoolName;
String buss = "培養人才";
int studentNum;
public School() {
// TODO Auto-generated constructor stub
}
public School(String schoolName, String buss, int studentNum) {
super();
this.schoolName = schoolName;
this.buss = buss;
this.studentNum = studentNum;
}
//宣傳
public void show(){
final double tvMoney = 10000;
final double netMoney = 20000;
class AdverTeam{
String teamName="無敵是多麼寂寞";
//電視宣傳
public void tvShow(){
System.out.println("宣傳隊是:"+teamName);
System.out.println("這是電視宣傳、學校名稱:"+schoolName+"、業務內容:"+buss+"、學校人數:"+studentNum+"、宣傳所需費用:"+tvMoney);
}
//網路宣傳
public void netShow(){
System.out.println("宣傳隊是:"+teamName);
System.out.println("這是網路宣傳、學校名稱:"+schoolName+"、業務內容:"+buss+"、學校人數:"+studentNum+"、宣傳所需費用:"+netMoney);
}
}
new AdverTeam().tvShow();
new AdverTeam().netShow();
}
}
public class SchoolTest {
public static void main(String[] args) {
School qinghua=new School("清華","網際網路培訓",1000);
qinghua.show();
}
}
匿名內部類
1、匿名內部類也就是沒有名字的內部類,這是java為了方便我們編寫程式而設計的一個機制,因為有時候有的內部類只需要建立一個它的物件就可以了,以後再不會用到這個類,這時候使用匿名內部類就比較合適。
2、使用場合:簡化內部類的使用
3、特徵:
○匿名內部類不能定義任何靜態成員、方法。
○匿名內部類中的方法不能是抽象的;
○匿名內部類必須實現介面或抽象父類的所有抽象方法。
○匿名內部類訪問的外部類成員變數或成員方法必須用static修飾;
public interface Inter {
public void show1();
public void show2();
}
public class Outer {
public void method(){
new Inter(){
public void show1() {
System.out.println("這是show1方法");
}
@Override
public void show2() {
System.out.println("這是show2方法");
}
}.show1();
new Inter(){
public void show1() {
System.out.println("這是show1方法");
}
@Override
public void show2() {
System.out.println("這是show2方法");
}
}.show2();
}
}
public class OuterTest {
public static void main (String[] args){
Outer t = new Outer();
t.method();
}
}
相關文章
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- Java內部類詳解--匿名內部類Java
- Java內部類Java
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- java內部類,為什麼需要內部類?Java
- Java內部類詳解-- 成員內部類Java
- 10、Java——內部類Java
- Java內部類詳解--區域性內部類Java
- Java類與匿名內部類Java
- Java基礎內部類4-內部類進階Java
- Java-InnerClass內部類Java
- java中的內部類Java
- Java 內部類詳解Java
- 淺談java內部類Java
- Java內部類詳解Java
- Java中的匿名內部類及內部類的二三事Java
- Java 的抽象類, 介面以及內部類Java抽象
- Java 內部類使用詳解Java
- Java 內部類與閉包Java
- 內部類與靜態內部類
- Java基礎-內部類詳解Java
- Java中內部類的騷操作Java
- Java內部類你真的會嗎?Java
- 淺談Java中的內部類Java
- java匿名內部類:“ 儂好,世界”Java
- java培訓教程:什麼是匿名內部類?怎樣建立匿名內部類?Java
- Java和ABAP裡的外部類和內部類Java
- 內部類
- 重拾java基礎之內部類Java
- ?你不知道的Java內部類Java
- JAVA基礎之介面與內部類Java
- Java基礎8:深入理解內部類Java
- Java之區域性匿名內部類物件Java物件
- Java 的各種內部類、Lambda表示式Java
- Java 內部類的意義及應用Java
- Java中的靜態內部類詳解Java
- java類內部程式碼執行順序Java
- Java_介面回撥與匿名內部類Java