內部類(懷孕的媽媽和孩子,媽媽有的孩子都可以享受)
問:什么是內部類呢呐粘?
答:內部類( Inner Class )就是定義在另外一個類里面的類。與之對應,包含內部類的類被稱為外部類。
問:那為什么要將一個類定義在另一個類里面呢悍及?清清爽爽的獨立的一個類多好啊=影心赶!
答:內部類的主要作用如下:
1. 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內缺猛,不允許同一個包中的其他類訪問該類
2. 內部類的方法可以直接訪問外部類的所有數(shù)據(jù)缨叫,包括私有的數(shù)據(jù)
3. 內部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)椭符,只是有時使用內部類更方便
問:內部類有幾種呢?
答:內部類可分為以下幾種:
成員內部類
靜態(tài)內部類
方法內部類
匿名內部類
public class Car {
public class Smallcar{
public void show(){
System.out.println("內部類");
}
}
public static void main(String[] args) {
Car c=new Car();
Smallcar s=c.new Smallcar();
s.show();
}
}
用內部類方法訪問外部私有數(shù)據(jù)
public class Car {
private inta=19;
public class Smallcar{
intb=99;
public void show(){
System.out.println("a "+a);//訪問外部私有數(shù)據(jù)
System.out.println("b "+b);
}
}
public static void main(String[] args) {
Car c=newCar();
Smallcar s=c.new Smallcar();
s.show();
}
}
public class Car {
private int a=19;
public class Smallcar{
int a=99;
public void show(){
System.out.println("a "+Car.this.a);//成員變量相同時弯汰,內部類訪問外部類的成員變量
System.out.println("a "+a);
}
}
public static void main(String[] args) {
Car c=newCar();
Smallcar s=c.newSmallcar();
s.show();
}
}
Java 中的靜態(tài)內部類
靜態(tài)內部類是 static 修飾的內部類艰山,這種內部類的特點是:
1、 靜態(tài)內部類不能直接訪問外部類的非靜態(tài)成員咏闪,但可以通過new 外部類().成員的方式訪問
2曙搬、?如果外部類的靜態(tài)成員與內部類的成員名稱相同,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員鸽嫂;如果外部類的靜態(tài)成員與內部類的成員名稱不相同纵装,則可通過“成員名”直接調用外部類的靜態(tài)成員
3、?創(chuàng)建靜態(tài)內部類的對象時据某,不需要外部類的對象橡娄,可以直接創(chuàng)建內部類 對象名= new 內部類();
public class Car {
static int a=19;
int b=98;
public static class Smallcar{
int a=99;
public? void show(){
System.out.println("a "+Car.a);//成員變量相同時,內部類訪問外部類的靜態(tài)成員變量
System.out.println("a "+a);
Car c=newCar();
System.out.println("b "+c.b);//內部類訪問外部類的非靜態(tài)成員變量癣籽,所以把b的媽媽car叫來
}
}
public static voidmain(String[] args) {
//? Car c=new Car();
Smallcar s=new Smallcar();
s.show();
}
}
a 19
a 99
b 98
java中的方法內部類
方法內部類就是內部類定義在外部類的方法中挽唉,方法內部類只在該方法的內部可見,即只在該方法內可以使用筷狼。
一定要注意哦:由于方法內部類不能在外部類的方法以外的地方使用瓶籽,因此方法內部類不能使用訪問控制符和 static 修飾符。
public classCar {
intb=98;
public? voidshow(){
final intsd=234;//外部類方法中的常量
intad=34;//外部類方法中的變量
classSmallcar{//? 注意: 內部類沒有public
intcar=23;//內部類方法中的變量
public voidprint(){//內部類的方法
System.out.println("car"+car);
}
}
Smallcar s=newSmallcar();//注意:創(chuàng)建內部類的對象
s.print();
}
public static voidmain(String[] args) {
Car c=newCar();
c.show();
}
}