package com.test1.java2;
//内部类
/*
*类A声明在类B中,A为内部类,B为外部类
* 内部类分类:成员内部类(静态、非静态)VS局部内部类(方法内、代码块内、构造器内)
* 成员内部类:
* 一方面是外部类的成员:1.调用外部类结构
* 一方面是一个类:1.可定义属性、方法、构造器;2.可以被final修饰,否则可以被继承;3.被abstract修饰,不能实例化
*/
public class InnerClass {
}
class Person{
String name;
int age;
public void eat() {
System.out.println("吃饭");
}
//静态成员内部类
static class Dog{
String name;
int age;
public void show() {
System.out.println("一只黄色的狗");
}
//非静态成员内部类
final class Bird{
String name;
public void Sing() {
System.out.println("唱歌");
}
}
public void method(){
//局部内部类
class A{
}
}
{
//局部内部类
class B{
}
}
public Person() {
//局部内部类
class C{
}
}
}
package com.test1.java2;
//内部类
/*
*①类A声明在类B中,A为内部类,B为外部类
*②内部类分类:成员内部类(静态、非静态)VS局部内部类(方法内、代码块内、构造器内)
*③成员内部类:
* 一方面是外部类的成员:1.调用外部类结构2.可以用static修饰3.可以被四种权限修饰符修饰
* 一方面是一个类:1.可定义属性、方法、构造器;2.可以被final修饰,否则可以被继承;3.被abstract修饰,不能实例化
*④如何创建成员内部类对象
*⑤如何在内部类中区分外部类调用结构
*⑥开发中局部内部类使用
*/
public class InnerClass {
public static void main(String[] args) {
//创建Dog实例(静态成员内部类)
Person.Dog dog = new Person.Dog();
dog.show();
//创建Bird实例(非静态成员内部类)
Person p1 = new Person();
Person.Bird bird = p1.new Bird();
bird.Sing();
bird.show("小鸟");
}
}
class Person{
String name = "小百合";
int age;
public void eat() {
System.out.println("吃饭");
}
//静态成员内部类
static class Dog{
String name;
int age;
public void show() {
System.out.println("一只黄色的狗");
}
}
//非静态成员内部类
class Bird{
String name = "百灵鸟";
public void Sing() {
System.out.println("唱歌");
eat();//省略Person.this.eat();
}
public void show(String name) {//三个重名属性
//形参name
System.out.println(name);
//调用Bird-name
System.out.println(this.name);
//调用Person-name
System.out.println(Person.this.name);
}
}
public void method(){
//局部内部类
class A{
}
}
{
//局部内部类
class B{
}
}
public Person() {
//局部内部类
class C{
}
}
}
package com.test1.java2;
//开发中局部内部类的使用
public class InnerClassTest1 {
//少见
public void method(){
//局部内部类
class A{
}
}
//返回一个实现了Comparable接口的类的对象
public Comparable getComparable() {
//创建一个实现Comparable接口的类:局部内部类
//方式一
// class MyComparable implements Comparable{
//
// @Override
// public int compareTo(Object o) {
// return 0;
// }
//
// }
// return new MyComparable();
//方式二
return new Comparable() {
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
};
}
}
△局部内部类运行顺序,内存解析暂有疑问