余姚做企业网站,企业网站设计制作价格,wordpress app上传,找电商平台帮我卖产品1.什么是内部类 在一个类的里面再定义一个类#xff0c;新定义的这个类就是内部类 举例#xff1a;在Outer类的里面定义一个Inter类
class Outer{class Inter{}
}
在这里Outer叫外部类#xff0c;Inter叫内部类 内部类的应用场景 定义一个汽车类#xff1a; 属性#xf…1.什么是内部类 在一个类的里面再定义一个类新定义的这个类就是内部类 举例在Outer类的里面定义一个Inter类
class Outer{class Inter{}
}
在这里Outer叫外部类Inter叫内部类 内部类的应用场景 定义一个汽车类 属性汽车品牌型号价格发动机的型号和使用年限的等等 这里发动机是一个独立的个体但是又依附于汽车单独纯在没有意义 代码示例
class Car{ //汽车类String carName;int carAge;int carPrice;class Engine{ //发动机String engineName;int engineAge;}
}
注意
内部类表示的事物是外部类的一部分
内部类单独出现没有任何意义 内部类的访问特点 1.内部类可以直接访问外部类的成员包括私有 2.外部类要访问内部类的成员必须创建对象 2.成员内部类 1.成员内部类是写在成员位置的属于外部类的成员上述Enging类就是成员内部类 2.成员内部类可以被一些修饰符所修饰比如privatedefault默认protectedpublicstatic被static修饰的成员内部类叫静态内部类 3.在成员内部类里面JDK16之前不能定义静态变量JDK16以后才可定义静态变量 如何获取成员内部类 1.直接创建 格式 外部类.内部类.对象名外部类对象.内部类对象
Outer.Inner oinew Outer().new Inner(); 2.外部类编写方法对外提供内部类对象 样例 class Car{String carName;int carAge;int carPrice;
//private修饰的内部类main无法访问也不能使用外部类.出来private class Engine{String engineName;int engineAge;}
//获取内部类的方法public Engine getinstance(){return new Engine();}}
public class T1 {public static void main(String[] args) {
//方法1创建一个外部类对象用Object形成多态接收内部类
Car carnew Car();
Object encar.getinstance();
//方法二直接使用内部类
Car car1new Car();System.out.println(car1.getinstance());}
} 成员内部类面试题
class Outer{int a10;class Inter{int a20;public void show(){int a30;System.out.println();//打印10System.out.println();//打印20System.out.println();//打印30}}
} 当变量名不同使直接调用即可 当外部类和内部类还有局部的变量名相同时直接打印会遵循就近原则 想要打印分别打赢就可以按下面这种方式调用 class Outer{int a10;class Inter{int a20;public void show(){int a30;System.out.println(Outer.this.a);//打印10System.out.println(this.a);//打印20System.out.println(a);//打印30}}
} 3.静态内部类 1.静态内部类就是被static修饰的成员内部类 2.静态内部类只能访问外部类中的静态变量和静态方法如果要访问非静态的变量和方法需要创建对象 3.创建静态内部类对象的格式 外部类名.内部类名 对象名new 外部类名.内部类名;
Outer.Inter oinew Outer.Inter(); 4.调用静态内部类中非静态的方法先创建对象使用对象调用 5.调用静态内部类中的静态方法外部类名.内部类名.方法名; 4.局部内部类 1.将内部类定义在方法里面的类就叫做局部内部类类似与方法中的局部变量 2.外界无法直接使用需要在方法内部创建对象并使用 3.该类可以直接访问外部类的成员也可访问方法类的局部变量 5.匿名内部类重点
匿名内部类本质上就是隐藏了名字的内部类
格式
new 类名或接口名{
重写方法
}举例
new Inter(){
public void show(){}
}遵循编译看左边运行看右边的原则
Swin snew Swin(){//实现了多态
public void swin(){
sout(重写接口里面swin的方法);
}
};
s.swin(); 匿名内部类是一个对象可以直接点方法调用自己类里面的方法
new Swin(){
public void swin(){
sout(重写接口里面swin的方法);
}
}.swin(); 使用场景 1.当方法的参数是接口或者类时 2.以接口为例可以传递这个接口的实现类对象 3.如果实现类只要使用一次就可以使用匿名内部类简化代码 注意匿名内部类可以写在局部位置也可以写在成员位置