成员外部类(类中的一个一般成员变量)
1、一个java文件中能够蕴含多个class,然而只能有一个public class
2、如果一个类定义在另一个类的外部,此时能够称之为外部类
应用
1、创立外部类的时候,跟之前的办法不一样,须要在内部类的后面增加外部类来进行润饰,如:InnerClassDemo.InnerClass innerClass = new InnerClassDemo().new InnerClass();
特点
1、外部类能够不便的拜访外部类的公有属性
2、外部类不能拜访外部类的公有属性(其余权限修饰符的属性也不行)、办法等等,只能将外部类的对象创立进去才能够办法属性和办法,如:System.out.println(new InnerClass().age);
3、一般的成员外部类中不能定义动态属性和静态方法(动态外部类中能够)
4、当外部类和外部类具备雷同的公有属性,在内部类中拜访的时候,间接拜访外部类的属性,如果须要拜访外部类的属性,如此:外部类的类名.this.属性名称
5、外部类能够嵌套多层,用法一样
示例
package com.msbline.innerclass;
public class InnerClassDemo {
private int id;
private String name="zhangsan";
public void show(){
System.out.println("show");
//外部类拜访外部类的属性
System.out.println(new InnerClass().age);
}
class InnerClass{
private int age;
private String name="lisi";
public void test(){
System.out.println("test");
//能够拜访外部类的公有属性
System.out.println(id);
//同名属性默认拜访本人的外部属性
System.out.println(name);
//拜访外部类的同名属性
System.out.println(InnerClassDemo.this.name);
}
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.msbline.innerclass;
public class TestInnerClass {
public static void main(String[] args) {
InnerClassDemo innerClassDemo = new InnerClassDemo();
innerClassDemo.show();
InnerClassDemo.InnerClass innerClass = new InnerClassDemo().new InnerClass();
innerClass.test();
}
}
匿名外部类
当定义了一个类,实现了某个接口,在应用过程中只须要应用一次,没有其余用处,其实思考到代码编写的简洁,能够思考不创立具体的类,而采纳new interface(){增加未实现的办法},就叫做匿名外部类
示例
package com.msbline.innerclass;
public class NoNameInnerClassDemo {
public static void main(String[] args) {
//new Runnable看起来像是new了一个接口,实际上是new了一个Runnable的实现类
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
}
}
办法外部类
特色:
1、办法外部类不能定义成static
2、办法外部类外面也不能定义静态方法和属性
3、应用的时候只能在办法中创建对象,意外此class的作用域就是以后办法
示例
package com.msbline.innerclass;
public class MethodInnerClass {
public void show(int b){
System.out.println("show");
class InnerClass{
private String name;
public void test(int a){
System.out.println("test");
System.out.println(a);
System.out.println(b);
}
}
new InnerClass().test(12);
}
public static void main(String[] args) {
new MethodInnerClass().show(11);
}
}
动态外部类
特色:
1、动态外部类合乎static的属性,只能拜访static润饰的内容(无论是拜访外部类还是外部类本人,都只能拜访static润饰的内容)
2、外部类能够拜访外部类的动态属性和办法,如:外部类名.属性名,外部类名.办法名,然而不能拜访外部类的非动态属性,只能通过创立外部类对象来拜访
示例
package com.msbline.innerclass;
public class StaticInnerClass {
private static int id;
private int gender;
public void test(){
//外部类拜访外部类的动态属性
System.out.println(InnerClass.name);
//外部类拜访外部类的一般属性
System.out.println(new InnerClass().age);
System.out.println("test");
}
static class InnerClass{
private static String name;
private String age;
public static void show(){
//拜访外部类的static属性和办法
System.out.println(id);
//不能拜访外部类的非static属性
// System.out.println(age);
//也不能拜访本人的非static属性
// System.out.println(gender);
System.out.println("show");
}
public void show1(){
//拜访外部类的static属性和办法
System.out.println(id);
//不能拜访外部类的非static属性
// System.out.println(age);
//也不能拜访本人的非static属性
// System.out.println(gender);
System.out.println("show");
}
}
public static void main(String[] args) {
InnerClass innerClass = new StaticInnerClass.InnerClass();
innerClass.show();
innerClass.show1();
//动态外部类的动态属性和静态方法跟一般类一样的拜访形式,能够不必new对象
System.out.println(InnerClass.name);
InnerClass.show();
// InnerClass.show1();//非法
}
}
发表回复