java 毕向东 内部类_java基础内部类(毕向东老师)
內部類
//特點:內部類可以直接訪問外部類的成員,
//外部類要訪問內部類中的成員必須創建內部類的對象。
//為什么要定義內部類呢?
類是用于描述事物的,而事務中如果還有具體的事物,而且這個內部的事物在訪問著所屬事物
中的內容,這時這個內部的事物,也需要用到類來描述。這個類就是內部類。
為什么內部類可以直接訪問外部類的成員?
因為內部類都持有一個外部類的引用。外部類名。this。
static class Inner{
int num=5;
void method(){
{
int num=6;
System.out.println("method run.."+num);
}
public void show(){
System.out.println("num+"num);
Inner in=new Inner();
in.method();
System.out.println("num="+Outer.this.num);
}
}
class Haha{
class Inner{
}
}
class InnerClassDemo{
public static void main(String[] args)
{
new Outer().show();
//直接在其他類中訪問一個類的內部類。
//因為Inner是一個成員,可以先創建一個對象。
Outer.Inner in= new Outer().new Inner();
in.method();
//直接new內部類對象。//調用內部類中的非靜態成員method
Outer.Inner in= new Outer.Inner();
in.method();
//訪問靜態內部類中的靜態成員,不需要對象。
Outer.Inter.function();
}
}
}
內部類也可以定義在外部類的局部位置上。
內部類定義在局部位置上,不允許訪問局部中的變量。
只能訪問被final修飾的局部常量。只能訪問被final修飾的局部常量。。。
class Outer
{
private int num=4;
private Object obj;
public void show(final int y){
final int x=5;
class Inner{
void method(){
System.out.println("num="+num);
System.out.println("x="+x);
}
}
obj=new Inner();
class InnerClassDemo3
{
public static void main(String[] args)
{
System.out.println("Hello World:");
}
}
方法要被對象調用,X只在show方法中有效。
//匿名內部類
凡是匿名都是簡寫格式。
要定義匿名內部類必須有前提,內部類需要繼承或者實現一個外部的類或者借口
這時才能簡寫成匿名內部類的形式。
匿名內部類。其實就是 Demo的一個對象。這個對象用{}結尾內部定義了成員
也就是說是一個帶有成員內容的對象,這個對象有點兒胖。
abstract class Demo
{
abstract void show();
}
class Outer
{
private int num=5;
class Inner(沒名字怎么辦?) extends Demo//多了這一條,可以進行簡寫了
{
void show()
{
System.out.println("show run..."+num);
}
}
public void method(){
Inner in=new Inner();
in.show();
//在創建對象的過程中就對其進行描述。
格式:new 父類名或接口名().成員。
//匿名內部類:其實就是 Demo的一個匿名子類對象。Demo類型的,多態的。
new Demo()
{
void show(){
System.out.println("show run..."+num);
}
}.show();(對象調用方法。)//描述在上面,畢老師說有點兒胖。
}
}
class NoInnerClassDemo
{
public static void main(String[] args){
Outer out=new Outer();
out.method();
}
}
//interface Inter
{
void show();
void show();
}
class Outer{
class Inner implements Inter
{
public void show1()
{}
public void show2()
{}
}
public void method(){
new Inter()
{public void show1()
{}
public void show2()
{}
Inner in=new Inter();
{
private int a=3;
public void show1(){}
public void show2(){}
public void show3(){}
};
in.show1();
in.show2();
in.show3();//不可以。因為這個子類對象已經升級為了Inter接口類型,只能使用Interzhong
的方法,不能使用子類的特有方法。
}
}
}
class NoInnerClassDemo2
{
public static void main(String[] args)
{
new Object()//Object obj=new object()
{
public void show(){
System.out.println("object show run......");
}
public String toString()
{
return "object tostring";
}
};
System.out.println(obj.tostring());
obj.show();
new Inner();
}
class Inner
{
}
public void function()
{
new Inner();
}
}
主函數能直接訪問的都是靜態的。隨類的加載而可以新建對象進行訪問。
總結
以上是生活随笔為你收集整理的java 毕向东 内部类_java基础内部类(毕向东老师)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java servlet 跳转_Serv
- 下一篇: java怎么判断数据类型_数据类型判断