文章目录
一:内部类的基本知识
1.内部类的概念:
在一个类中定义另一个类。举例:一个类A中定义一个类B,类B就被称为内部类。
2.内部类的定义格式
class 类名{
修饰符 class 类名{
}
}
具体格式举例:class A{
public class B{
}
}
3.内部类的访问特点:
内部类可以访问外部类的成员变量,包括私有的。
外部类访问内部类的成员必须创建对象。
二、内部类的代码实现
1.内部类例题:
需求:定义一个外部类Outer,内部含带一个私有的成员变量num,随后定义内部类Inner,Inner中定义show方法,该方法的功能是打印私有成员变量。请对内部类定义的show方法进行调用。
内部类:
package day0802;
/*
内部类:可以调用外部类的成员变量和方法
外部类:先要创建类的对象才能够调用内部类的变量和方法
*/
public class outer {
private int num = 10;
public class Inner{
public void show(){
System.out.println(num);
}
}
public void method(){
Inner inner = new Inner();
inner.show();
}
public static void main(String[] args) {
outer.Inner ot = new outer().new Inner();
ot.show();
System.out.println("------");
outer sd = new outer();
sd.method();
}
}
三:成员内部类的基本知识
1.成员内部类的定义位置:
在类中方法,跟成员变量是一个位置。
2.外界创建成员内部类格式:
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
举例:Outer.Inner oi = new Outer().new Inner();
3.成员内部类的推荐使用方案:
将一个类设计为内部类的目的,大多数都不是想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
四:成员内部类的代码实现:
1.内部类例题:
需求:定义一个外部类Outer,随后编写内部类Inner,Inner当中,定义show方法(方法随意输出一句话),在测试类中,创建内部类对象,并调用show方法,注意格式问题
成员内部类:
Outer类:
package chenyuan;
public class Outer {
private int num = 10;
public class Inner{
public void show(){
System.out.println(num);
}
}
}
InnerDemmo类:
package chenyuan;
public class InnerDemmo {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
五:局部内部类的基本知识
** 1.局部内部类定义位置 **
局部内部类是在方法中定义的类
2.局部内部类使用格式:
局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用。该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
六:局部内部类的代码实现:
1.局部内部类例题:
Outer类:
package itheima01;
public 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();
}
}
OuterDemo类:
package itheima01;
public class OuterDemo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
七:匿名内部类的基本知识
1.存在一个类和接口,这里的类可以是具体类也可以是抽象类。
2.匿名内部类的格式:
格式:new 类名(){重写方法} new 接口名(){重写方法}
举例: new Inter(){
@Override
public void method(){}
}
3.匿名内部类的本质:
本质:是一个继承了该类或者实现了该接口的子类匿名对象
4.匿名内部类的细节:
匿名内部类可以通过多态的形式接受:
Inter i = new Inter(){
@Override
public void method(){}
}
八:匿名内部类的代码实现
1.匿名内部类例题:
Inter接口:
package ieheima01;
public interface Inter {
void show();
}
Outer类:
package ieheima01;
/*
前提:存在一个类或者接口
这里的类可以是具体类也可以是抽象类
格式:
new 类名或者接口名(){
重写方法;
};
本质是什么呢?
是一个继承了该类或者实现了该接口的子类匿名对象
*/
public class Outer {
public void method(){
Inter i = new Inter(){
@Override
public void show() {
System.out.println("匿名内部类");
}
};
i.show();
}
}
OuterDemo测试类:
package ieheima01;
public class OuterDemo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}