java如何訪問內部類
外部類訪問內部類要創建內部類的對象才能訪問內部類的成員;
內部類可以直接訪問外部類的成員
package com.test;
public class Outer {
public class Inner{
int a;
int b;
}
public void fun(){
int a = new Inner().a;
}
public void fun2(){
int b = new Inner().b;
}
}
Ⅱ Java外部類怎麼訪問內部類的方法和成員呢可以在外部類創建內部類的實例化對象嗎
是可以的,付代碼說明:
packagecom.demo;
publicclassMain{
publicstaticvoidmain(String[]args){
//非靜態內部類實例對象無法獨立存在,必須依賴於一個外部類的實例對象
//所以必須先實例化一個外部類對象
Demodemo=newDemo();
//因為非靜態內部類也是類的非靜態成員,所以可以用對象.來訪問
//下面用外部類對象.內部類構造器來創建內部類對象
Demo.InnerDemoinnerDemo=demo.newInnerDemo();
innerDemo.show();
}
}
/**
*一個外部類
*/
classDemo{
/**
*內部類,這里的內部類是非靜態的。
*
*實例化靜態內部類很簡單,直接類名.內部類名,這里不多說。
*/
publicclassInnerDemo{
/**
*內部類的一個方法
*/
publicvoidshow(){
System.out.println("這是一個內部類的方法");
}
}
}
Ⅲ java外部類怎樣調用內部類方法
你這裡面有兩個錯:
1、Leis內部類是非靜態類,不能在靜態方法里初始化,即第三行Leis x=new Leis();報錯,可以把Leis類改成靜態類,即
public static class Leis{
......
}
2、Leis()是Leis類的構造函數,不能在第4行x.Leis()顯示調用
一句話:靜態方法里不能訪問非靜態內部類。但你可以在外部類的一個成員方法里訪問非靜態內部類,然後你再在靜態方法里初始化外部類,通過外部類來訪問非靜態內部類。
Ⅳ java中我把外部類方法私有了 內部類如何訪問該方法 代碼如下
private int x=3;
int a;
static class Inner
{
int x = 4;
public void function() {
int x = 6;
System.out.println(x);
System.out.println(this.x);
// System.out.println(Outer.this.x);//內部類可以直接訪問外部類中的成員,包括私有。(訪問私有)
// method();//內部類可以直接訪問外部類中的成員,包括私有。(該訪問成員)
}
}
public static void main(String[] args){
new Inner().function();
}
只能這樣做,把內部類改成 靜態的 直接new一個類 調方法
Ⅳ java內部類怎麼使用
1.內部類的方法可以訪問它所在的外部類中的所有域,包括私有型別的;
2.對於同一個包中的其它類它是隱藏的;
3. 匿名的內部類可以讓我們很方便的定義事件響應(call back),這在GUI編程中很常見
interface OutInterface{ //定義一個介面 public void f(); } public class InterfaceInner { //主類 public static void main(String args[]){ OuterClass2 out=new OuterClass2(); OutInterface outinter=out.doit(); outinter.f(); } } class OuterClass2{ //定義一個內部類,並且介面OutInterface private class InnerClass implements OutInterface{ InnerClass(String s){ System.out.println(s); } public void f(){ System.out.println("訪問內部類中的f()方法"); } } public OutInterface doit(){ //方法返回介面 return new InnerClass("訪問內部類構造方法"); } }
Ⅵ Java如何調用內部類的方法
在其他類中創建內部類的對象時,必須要使用外部類的實例來創建。比如類B是類A的內部類,則語句A.B=new A.B()將是錯誤的。正確的方法是先創建一個類A的對象,比如A ma=new ma();然後再用這個對象來創建內部類的實例,比如A.B mab=ma.new B();這里要注意後面的語法ma.new B()。也可以把這兩步合為一步,比如A.B mab=new A().new B();注意,這里使用了兩個new運算符,如果只有一個將是錯誤的,比如A.B mab=new A().B();是錯誤的,new A().B()語句JAVA會理解為創建一個無名的引用,然後由這個引用調用類A中的B()函數。如果需要調用的構造函數不是默認的,則可以這樣創建比如A.B mab=new A(2).new B();或者分為兩步A ma=new A(2); A.B mab=ma.new B();
而且我也怕是不是會重新建個棋盤,那就不行了!
這個你可以放心,不會創建兩個棋盤,下面舉例驗證
public class A2 extends JFrame {
public static void main(String[] args) {
A ma=new A(); //可以看到在這里並沒有創建內部類,也就是說內部類中的bbb並沒有輸出
A.A1 ma1=ma.new A1(); //調用內部類的方法,當然內部類如果有帶參數構造函數,則還應在內部類中加上參數。
ma1.f();
}}
class A{
A(){System.out.println("aaa");}
class A1{
A1(){System.out.println("bbb");}
public void f(){System.out.println("kkk");}}
}