java
public class Outer {public int count;//內(nèi)部類也相當(dāng)于是外部類中的一個(gè)成員變量
class Inner{
public int count;
public void show() {
System.out.println("inner show");
}
}
}
//思路:1、把內(nèi)部類當(dāng)成是外部類中的一個(gè)成員,那么想要找到內(nèi)部類就需要有外部類的對(duì)象
//2、show方法需要對(duì)象進(jìn)行調(diào)用的,而內(nèi)部類的對(duì)象又需要外部類的對(duì)象進(jìn)行調(diào)用
//3、外部類.內(nèi)部類 變量名 = 外部類對(duì)象.內(nèi)部類對(duì)象
//4、Outer.Inner inner = new Outer().new Inner();
public static void main(String[] args) {
Outer outer = new Outer();
System.out.println(outer.count);
//創(chuàng)建內(nèi)部類對(duì)象
Outer.Inner inner = outer.new Inner();
inner.show();
}
?
java
public class Outer {//對(duì)于該成員變量,其生命周期和對(duì)象的生命周期一致,作用域在整個(gè)類中都可以使用,調(diào)用形式:使用對(duì)象調(diào)用
//可用的修飾符:public private protected static final
private int count;//private修飾后,該類就只能在當(dāng)前類中使用
//static修飾后,該類的生命周期和外部類的生命周期一致,就失去了內(nèi)部類本身的意義
//final修飾后,該類無(wú)法被繼承
class Inner{
private int count;
public void show() {
System.out.println("inner show");
}
}
}
//調(diào)用
Outer.Inner inner = new Outer.Inner();
inner.show();
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
?注意:內(nèi)部類可以調(diào)用外部類的屬性和方法,但是外部類只能通過(guò)對(duì)象的形式去調(diào)用內(nèi)部類中的屬性和方法。
java
//在內(nèi)部類中區(qū)分this關(guān)鍵詞的所屬
public class Outer {
private int count = 6;
//內(nèi)部類也相當(dāng)于是外部類中的一個(gè)成員變量
class Inner{
public int count = 5;
public int num;
public void show() {
int count = 4;
System.out.println("inner show "+ Outer.this.count);
}
}
public void method() {
Inner inner = new Inner();
inner.show();
}
}
java
public class Outer2 {
/**
* jdk1.8中內(nèi)部類所在的方法中的參數(shù)默認(rèn)是final修飾的
* jdk1.7及之前需要明確標(biāo)出final
* @param count
*/
public void method(int count) {
int a = 1;
//count++;
class Inner{
public void show() {
System.out.println("show "+count);
}
}
new Inner().show();
}
public static void main(String[] args) {
Outer2 outer = new Outer2();
outer.method(1);
}
}
java
public interface ItemDao{
public int delUser(int uid);
}
public static void main(String[] args){
new ItemDao(){
@Override
public int delUser(int uid){}
}.delUser(1);
}
//上述形式,相當(dāng)于創(chuàng)建了一個(gè)子類去實(shí)現(xiàn)了ItemDao接口并重寫方法
public class ItemDaoImpl implements ItemDao{
@Override
public int delUser(int uid){}
}
//單獨(dú)創(chuàng)建一個(gè)類去實(shí)現(xiàn)接口和使用匿名內(nèi)部類實(shí)現(xiàn)接口的區(qū)別是:使用匿名內(nèi)部類可節(jié)約資源-生命周期短
?java
public interface ItemDao{
public int delUser(int uid);
public int insertUser();
}
public static void main(String[] args){
ItemDao itemDao = new ItemDao(){
@Override
public int delUser(int uid){}
@Override
public int inserUser(){}
};
itemDao.delUser(1);
itemDao.inserUser();
}
java
public interface ItemDao{
public int delUser(int uid);
public int insertUser();
}
public static void main(String[] args){
ItemDao itemDao = new ItemDao(){
@Override
public int delUser(int uid){}
@Override
public int inserUser(){}
public void show(){}
};
itemDao.delUser(1);
itemDao.inserUser();
//itemDao.show();
}
java
public interface IUserDao{
public void speak();
}
public static void main(String[] args){
Object obj = new IUserDao(){
@Override
public void speak(){
Syso("speak");
};
};
obj.speak();
IUserDao userDao = new IUserDao(){
@Override
public void speak(){
Syso("speak");
};
};
userDao.speak();
}