內部類是什麼?匿名內部類又是什麼?
前言
內部類:成員內部類、區域性內部類、匿名內部類1. 內部類的概念及格式
1.1 概念
在一個類中定義一個類。舉例:在一個類A的內部定義一個類B,類B就被稱為內部類
1.2 格式
/*
格式:
class 外部類名{
修飾符 class 內部類名{
}
}
*/
class Outer {
public class Inner {
}
}
1.3 內部類的訪問特點
內部類可以直接訪問外部類的成員,包括私有
外部類要訪問內部類的成員,必須建立物件
1.4 示例程式碼
public class Outer {
private int num = 10;
public class Inner {
public void show() {
System.out.println(num);
}
}
public void method() {
Inner i = new Inner();
i.show();
}
}
2. 成員內部類
- 成員內部類的定義位置 :
在類中方法,跟成員變數是一個位置 ;- 外界建立成員內部類格式 :
格式:外部類名.內部類名 物件名 =外部類物件.內部類物件;
舉例:Outer.Inner oi = new Outer().new Inner();- 成員內部類的推薦使用方案 :
將一個類,設計為內部類的目的,大多數都是不想讓外界去訪問,所以內部類的定義應該私有化,私有
化之後,再提供一個可以讓外界呼叫的方法,方法內部建立內部類物件並呼叫.
示例程式碼:
class Outer {
private int num = 10;
private class Inner {
public void show() {
System.out.println(num);
}
}
public void method() {
Inner i = new Inner();
i.show();
}
}
public class InnerDemo {
public static void main(String[] args) {
//Outer.Inner oi = new Outer().new Inner();
//oi.show();
Outer o = new Outer();
o.method();
}
}
3. 區域性內部類
- 區域性內部類定義位置 :
區域性內部類是在方法中定義的類 ;- 區域性內部類方式方式 :
區域性內部類,外界是無法直接使用,需要在方法內部建立物件並使用;
該類可以直接訪問外部類的成員,也可以訪問方法內的區域性變數 示例程式碼.
示例程式碼:
class Outer {
private int num = 10;
public void method() {
int num2 = 20;
class Inner {
public void show() {
System.out.println(num);
System.out.println(num2);
}
}
Inner i = new Inner();
i.show();
}
}
public class OuterDemo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
4. 匿名內部類
- 匿名內部類的前提
存在一個類或者介面,這裡的類可以是具體類也可以是抽象類- 匿名內部類的格式
格式:new 類名 ( ) { 重寫方法 } new 介面名 ( ) { 重寫方法 }
舉例:
new Inter(){
@Override
public void method(){
}
}
- 匿名內部類的本質
本質:是一個繼承了該類或者實現了該介面的子類匿名物件- 匿名內部類的細節
匿名內部類可以通過多型的形式接受
Inter i = new Inter(){
@Override
public void method(){
}
}
- 匿名內部類直接呼叫方法
interface Inter{
void method();
}
class Test{
public static void main(String[] args){
new Inter(){
@Override
public void method(){
System.out.println("我是匿名內部類");
}
}.method(); // 直接呼叫方法
}
}
5. 匿名內部類在開發中的使用
當發現某個方法需要,介面或抽象類的子類物件,我們就可以傳遞一個匿名內部類過去,來簡化傳統的 程式碼
示例程式碼:
/*
跳高介面
*/
public interface Jumpping {
void jump();
}
public class Cat implements Jumpping {
@Override
public void jump() {
System.out.println("貓可以跳高了");
}
}
public class Dog implements Jumpping {
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
}
/*
介面操作類,裡面有一個方法,方法的引數是介面名
*/
public class JumppingOperator {
public void method(Jumpping j) { //new Cat(); new Dog();
j.jump();
}
}
/*
測試類
*/
public class JumppingDemo {
public static void main(String[] args) {
//需求:建立介面操作類的物件,呼叫method方法
JumppingOperator jo = new JumppingOperator();
Jumpping j = new Cat();
jo.method(j);
Jumpping j2 = new Dog();
jo.method(j2);
System.out.println("--------");
jo.method(new Jumpping() {
@Override
public void jump() {
System.out.println("貓可以跳高了");
}
});
jo.method(new Jumpping() {
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
});
}
}
相關文章
- java培訓教程:什麼是匿名內部類?怎樣建立匿名內部類?Java
- java內部類,為什麼需要內部類?Java
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- 匿名內部類
- Java內部類詳解--匿名內部類Java
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- 匿名內部類理解
- Java類與匿名內部類Java
- 匿名內部類的使用
- Java中的匿名內部類及內部類的二三事Java
- Lambda對比匿名內部類,Lambda是什麼,Lambda該怎麼用,Lambda使用過程中有什麼需要注意的?
- java匿名內部類:“ 儂好,世界”Java
- [短文速讀-3] 內部匿名類使用外部變數為什麼要加final變數
- 內部類與靜態內部類
- 匿名內部類中關於new Runnable ( )
- 內部類
- Java內部類詳解-- 成員內部類Java
- Java_介面回撥與匿名內部類Java
- Java之區域性匿名內部類物件Java物件
- Java內部類詳解--區域性內部類Java
- Java內部類Java
- Java 內部類Java
- 面試題:連結串列為什麼使用內部類實現?面試題
- 用匿名內部類實現 Java 同步回撥Java
- 關於java匿名內部類初始化法Java
- 內部類與外部類
- scala_繼承、型別判斷、抽象類、匿名內部類繼承型別抽象
- Java基礎內部類4-內部類進階Java
- 匿名內部類方式實現執行緒的建立執行緒
- 內部類,Object,字串Object字串
- 10、Java——內部類Java
- 內部類解說
- 泛型,內部類泛型
- lambda表示式在oj中會比匿名內部類慢
- 什麼是http500內部伺服器錯誤?HTTP伺服器
- 區域性內部類
- 靜態內部類 呼叫
- java中的內部類Java