- 内部类
一般情况下,我们把类定义成独立的单元。有些情况下,我们把一个类放在另一个类的内部定义,称为内部类。 - 内部类的作用
1.内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
2.内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。 - 内部类的使用场合:由于内部类提供了更好的封装性,并且可以很方便的访问外部属性。所以,通常内部类在只为所在外部类提供服务的情况下优先使用。
- 内部类分类
1.成员内部类:非静态内部类,静态内部类。
2.匿名内部类:适合那种只需要使用一次的类。
3.局部内部类:定义在方法内部。作用域只限于本方法,用的非常少。
package day15.Demo1;
public class TestInnerClass1 {
public static void main(String[] args) {
OuterClass out = new OuterClass();
OuterClass.InnerClass1 in1 = out.new InnerClass1();
in1.getOuterClassName();
OuterClass.InnerClass2 in2 = new OuterClass.InnerClass2();
String s = in2.getName();
System.out.println(s);
}
}
class OuterClass{
private String name = "OuterClass";
private int age = 10;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
class InnerClass1{
private String name = "InnerClass1";
private int age = 100;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void getOuterClassName(){
System.out.println(OuterClass.this.name);
System.out.println(OuterClass.this.getAge());
}
}
static class InnerClass2{
private String name = "InnerClass2";
private int age = 1000;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
package day15.Demo1;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class TestInnerClass2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Person [] p = new Person[5];
String name = null;
Integer age = 0;
for(int i = 0; i < p.length; i++){
name = input.next();
age = input.nextInt();
p[i] = new Person(name, age);
}
System.out.println("输入的人的名字和年龄:");
for(int i = 0; i < p.length; i++){
System.out.println(p[i].getName() + "\t" + p[i].getAge());
}
Arrays.sort(p, new Comparator<Person>(){
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println("排序后的人的名字和年龄:");
for(int i = 0; i < p.length; i++){
System.out.println(p[i].getName() + "\t" + p[i].getAge());
}
}
}
class Person{
private String name;
private Integer age;
public Person(String name, Integer age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Comparator getMyComparator(){
class MyComparator implements Comparator <Person>{
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
}
return new MyComparator();
}
}