你之因此能优于别人,正是由于你坚持了别人所不能坚持的。
本文相关代码在个人Github,欢迎Star~
https://github.com/zhangzhibo1014/DaBoJava
将一个类的定义放在另外一个类的定义内部,这就是内部类。而包含内部类的类被称为外部类git
成员内部类是最普通的一种内部类,成员内部类能够访问外部类全部的属性和方法。可是外部类要访问成员内部类的属性和方法,必需要先实例化成员内部类。github
public class Demo { private String name = "Tom"; // 定义一个成员内部类,做为成员变量 class Student{ private int age = 20; private String name = "Jack"; public void show() { System.out.println("内部类属性;" + name); System.out.println("内部类属性:" + age); System.out.println("外部类属性:" + Demo.this.name); } } public static void main(String[] args) { //声明一个外部类对象 Demo demo = new Demo(); //声明一个内部类对象 Student student = demo.new Student(); student.show(); } }
内部类 对象名 = 外部类对象.new 内部类();
this
关键字。注:成员内部类不能含有 static
的变量和方法,由于成员内部类须要先建立了外部类,才能建立它本身的微信
静态内部类一般被称为嵌套类。app
静态内部类是不须要依赖于外部类的,这点和类的静态成员属性有点相似,而且它不能使用外部类的非static成员变量或者方法,这点很好理解,由于在没有外部类的对象的状况下,能够建立静态内部类的对象,若是容许访问外部类的非static成员就会产生矛盾,由于外部类的非static成员必须依附于具体的对象函数
public class Demo1 { private String name = "static"; private static int id = 2019; static class Student{ int id = 11; public void show() { System.out.println("外部类成员变量:" + (new Demo1().name)); System.out.println("外部类静态成员:" + Demo1.id); System.out.println("内部类成员变量:" + id); } } public static void main(String[] args) { Student student = new Student(); student.show(); } }
new 外部类().成员
的方式访问类名.静态成员
访问外部类的静态成员;若是外部类的静态成员与内部类的成员名称不相同,则可经过 成员名
直接调用外部类的静态成员内部类 对象名 = new 内部类();
局部内部类,是指内部类定义在方法和做用域内ui
局部内部类也像别的类同样进行编译,但只是做用域不一样而已,只在该方法或条件的做用域内才能使用,退出这些做用域后没法引用的。this
/** * 局部内部类 */ public class Demo2 { //将内部类定义在方法中 public void show() { final String name = "Tom"; class Student{ int id = 20; public void show() { System.out.println("外部类方法变量:" + name); System.out.println("内部类属性变量:" + id); } } Student student = new Student(); student.show(); } //将内部类定义在做用域内 public void display(int num) { if(num > 2) { class Person{ int age = 18; public void show() { System.out.println("age = " + age); } } Person person = new Person(); person.show(); } else { System.out.println("None"); } } public static void main(String[] args) { Demo2 demo2 = new Demo2(); demo2.show(); demo2.display(3); } }
public
、 protected
、 private
以及 static
修饰符的。final
修饰。匿名内部类,顾名思义,就是没有名字的内部类。正由于没有名字,因此匿名内部类只能使用一次,它一般用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口设计
/** * 匿名内部类 */ public class Demo3 { public static void main(String[] args) { Demo3 demo3 = new Demo3(); // 匿名内部类 -> 类继承 new Animal() { public void say() { System.out.println("Say"); } }.say(); // 匿名内部类 -> 接口实现 new Fruit(){ public void eat() { System.out.println("apple"); } }.eat(); } } class Animal{ public void say() { System.out.println("Animal say"); } } interface Fruit{ void eat(); }
new
匿名类,这个类是要先定义的, 若是不先定义,编译时会报错该类找不到。咱们能够根据具体需求来设计和使用内部类。code
相关代码记录于GitHub中,欢迎各位伙伴 Star !对象
有任何疑问 微信搜一搜 [程序猿大博] 与我联系~
若是以为对您有所帮助,请 点赞 ,收藏 ,若有不足,请评论或私信指正!谢谢~