内部类
概述:把A类定义到B类的内部,那么A类叫做内部类,B类叫做外部类
根据内部类在外部类中定义位置不同,分为成员内部类,局部外部类
成员内部类:定义在外部类的成员位置
局部内部类:定义在外部类的局部位置,也就是外部类中的方法内部
//外部类
class wai {
//内部类
class nei {
}
}
特点:
内部类可以直接访问外部类成员,包含private
外部类要访问内部类的成员,必须创建对象
内部类可以私有修饰,外部类不可以
私有成员内部类,外界无法创建对象
static可以修饰内部类
静态的成员内部类 创建语法更加简介:Wai.Nei nei=new wai.nei()
静态成员内部类,只能访问外部类静态成员
访问 外部类名
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
class Outer {
//外部类的成员变量
public int num = 10;
class Inner {
//内部的成员变量
public int num = 20;
public void show() {
//局部变量
int num = 30;
System.out.println(num); //30
System.out.println(this.num); //20
System.out.println(Inner.this.num); //20
//这样太繁琐了
//System.out.println(new Outer().num); //10
// 这个语法 Outer.this 表示外部类对象
System.out.println(Outer.this.num);
类,要访问外部类的局部变量,局部变量必须用final修饰使之成为常量
public class Test2 {
}
class Outer {
public void waiShow(final int a) {
//局部变量
final int num = 20;
class Inner {
public void neiShow() {
//num = 120; 报错,他是常量
System.out.println(num);
System.out.println(a);
}
}
}
}
外部类访问内部类里面的成员方法
需要在外部类的方法中,创建内部类对象,然后用对象去调用
public class MyTest2 {
public static void main(String[] args) {
Wai wai = new Wai();
wai.test();
}
}
public class Wai {
int num = 20;
private int a = 60;
//成员内部类
public class Nei {
int n = 5;
int x = 100;
public void neiShow() {
System.out.println("内部类的show方法" + n);
//内部类的特点:内部类可以直接访问外部类的成员,包括私有成员。
System.out.println(num);
System.out.println(a);
waiShow();
hehe();
}
public void neiHeHe() {
System.out.println("内部类hehe方法");
}
}
public void waiShow() {
System.out.println("外部类的show方法");
}
private void hehe() {
System.out.println("外部类的私有方法");
}
public void test() {
//创建内部类对象
Nei nei = new Nei();
System.out.println(nei.n);
System.out.println(nei.x);
nei.neiHeHe();
}
}
方法参数类型以及返回值类型
-
当你以后看到一个方法的形参,要一个类 类型,就传递一该类的参数
-
当看到方法形参,要一个抽象类类型,传递该抽象类的子类对象
-
当看到方法形参,要一个接口类型,传递该接口类的子类对象
-
当看到方法返回值类型,要一个类,就返回该类对象
-
当看到方法返回值类型,要一个抽象类类型,就返回该抽象类的子类对象
-
当看到方法返回值类型,要一个接口类型,就返回该接口类的子类对象