黑马程序员——Java基础——内部类

时间:2021-03-17 00:43:41

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

内部类:就是在类里面定义的类。
1、可以直接访问外部类的成员,包括私有的。
2、外部类要访问内部在类,要建立内部类对象。

public class InnerClassTest {
public static void main(String[] args){
Out.In aa=new Out().new In(); //定义一个内部类对象
aa.inPrint();
}
}

class Out{
private int age=10;
class In{
void inPrint(){
System.out.println("外部类的成员变量的值是: "+age);
}
}
}

上面的代码 内部类 In 可以访问外部类 Out 的私有成员变量 age

对于外部类成员变量、内部类成员变量和局部变量分别如何访问,从下面的例子可以得知:

public class InnerClassTest2 {
public static void main(String[] args){
Out2.In2 bb=new Out2().new In2();
bb.inPrint();
}
}
class Out2{
private int age=100;
class In2{
int age=23;
void inPrint(){
int age=6;
System.out.println("局部变量的值: "+age);
System.out.println("内部类成员变量的值: "+this.age);
System.out.println("外部类成员变量的值: "+Out2.this.age);
}
}
}

当内部类被静态static 修饰时,例子如下:

public class InnerClassTest3 {
public static void main(String[] args){
Out3.In3 aa=new Out3.In3(); //静态内部类对象定义方式
aa.inPrint();
}
}

class Out3{
private static int age=10;
static class In3{ //当内部类被静态static修饰时,上面的外部类成员变量必须也是静态的才能访问
void inPrint(){
System.out.println("外部类的成员变量的值是: "+age);
}
}
}

如果内部类是私有的,那在主函数中就不能定义内部类对象了,只能通过外部类对象的方法来访问内部类的成员。

下面是例子:

public class InnerClassTest4 {
public static void main(String[] args){
Out4 aa=new Out4(); //静态内部类对象定义方式
aa.OutPrint();
}
}

class Out4{
private int age=10;
private class In4{ //当内部类被私有化时
void inPrint(){
System.out.println("外部类的成员变量的值是: "+age);
}
}
public void OutPrint(){
new In4().inPrint();
}
}

匿名内部类:就是内部类的简写格式。一般情况,匿名内部类的建立要有一个前提,内部类必须是继承一个父类或者实现接口。它其实就是匿名子类对象。

public class NiMingClass {
public static void main(String[] args){
School aa=new School();
aa.function();
}
}

abstract class People4{
String name;
abstract void walk();
}

class School{
String adress;
// class Student extends People4{
// int stuId;
// void walk(){
// System.out.println("慢慢走的");
// }
// }

void function(){
//new Student().walk();

new People4(){
void walk(){
System.out.println("慢慢走慢慢走");
}
void sleep(){
System.out.println("睡觉");
}
}.walk();

}
}