
1. 內(nèi)部類的基本使用
-
內(nèi)部類概念
- 在一個類中定義一個類。舉例:在一個類A的內(nèi)部定義一個類B,類B就被稱為內(nèi)部類
-
內(nèi)部類定義格式
- 格式&舉例:
/*
格式:
class 外部類名{
修飾符 class 內(nèi)部類名{
}
}
*/
class Outer {
public class Inner {
}
}
-
內(nèi)部類的訪問特點
- 內(nèi)部類可以直接訪問外部類的成員,包括私有
- 外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象
-
示例代碼:
文章來源:http://www.zghlxwxcb.cn/news/detail-467265.html
/*
內(nèi)部類訪問特點:
內(nèi)部類可以直接訪問外部類的成員,包括私有
外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象
*/
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. 成員內(nèi)部類
- 成員內(nèi)部類的定義位置
- 在類中方法,跟成員變量是一個位置
- 外界創(chuàng)建成員內(nèi)部類格式
- 格式:外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
- 舉例:Outer.Inner oi = new Outer().new Inner();
- 私有成員內(nèi)部類
- 將一個類,設(shè)計為內(nèi)部類的目的,大多數(shù)都是不想讓外界去訪問,所以內(nèi)部類的定義應該私有化,私有化之后,再提供一個可以讓外界調(diào)用的方法,方法內(nèi)部創(chuàng)建內(nèi)部類對象并調(diào)用。
- 示例代碼:
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();
}
}
- 靜態(tài)成員內(nèi)部類
- 靜態(tài)成員內(nèi)部類訪問格式:外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
- 靜態(tài)成員內(nèi)部類中的靜態(tài)方法:外部類名.內(nèi)部類名.方法名();
- 示例代碼
class Outer {
static class Inner {
public void show(){
System.out.println("inner..show");
}
public static void method(){
System.out.println("inner..method");
}
}
}
public class Test3Innerclass {
/*
靜態(tài)成員內(nèi)部類演示
*/
public static void main(String[] args) {
// 外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
Outer.Inner oi = new Outer.Inner();
oi.show();
Outer.Inner.method();
}
}
3. 局部內(nèi)部類
- 局部內(nèi)部類定義位置
- 局部內(nèi)部類是在方法中定義的類
- 局部內(nèi)部類方式方式
- 局部內(nèi)部類,外界是無法直接使用,需要在方法內(nèi)部創(chuàng)建對象并使用
- 該類可以直接訪問外部類的成員,也可以訪問方法內(nèi)的局部變量
- 示例代碼
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. 匿名內(nèi)部類
- 匿名內(nèi)部類的前提
- 存在一個類或者接口,這里的類可以是具體類也可以是抽象類
- 匿名內(nèi)部類的格式
- 格式:new 類名 ( ) { 重寫方法 } new 接口名 ( ) { 重寫方法 }
- 舉例:
new Inter(){
@Override
public void method(){}
}
- 匿名內(nèi)部類的本質(zhì)
- 本質(zhì):是一個繼承了該類或者實現(xiàn)了該接口的子類匿名對象
- 匿名內(nèi)部類的細節(jié)
- 匿名內(nèi)部類可以通過多態(tài)的形式接受
Inter i = new Inter(){ @Override public void method(){ } }
- 匿名內(nèi)部類直接調(diào)用方法
interface Inter{
void method();
}
class Test{
public static void main(String[] args){
new Inter(){
@Override
public void method(){
System.out.println("我是匿名內(nèi)部類");
}
}.method(); // 直接調(diào)用方法
}
}
5. 匿名內(nèi)部類在開發(fā)中的使用(應用)
- 匿名內(nèi)部類在開發(fā)中的使用
- 當發(fā)現(xiàn)某個方法需要,接口或抽象類的子類對象,我們就可以傳遞一個匿名內(nèi)部類過去,來簡化傳統(tǒng)的代碼
- 示例代碼:
/*
游泳接口
*/
interface Swimming {
void swim();
}
public class TestSwimming {
public static void main(String[] args) {
goSwimming(new Swimming() {
@Override
public void swim() {
System.out.println("鐵汁, 我們?nèi)ビ斡景?);
}
});
}
/**
* 使用接口的方法
*/
public static void goSwimming(Swimming swimming){
/*
Swimming swim = new Swimming() {
@Override
public void swim() {
System.out.println("鐵汁, 我們?nèi)ビ斡景?);
}
}
*/
swimming.swim();
}
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-467265.html
到了這里,關(guān)于【JavaSE】Java基礎(chǔ)語法(二十一):內(nèi)部類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!