内部类学习

在这里插入图片描述

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;
			}
			
		};
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
△局部内部类运行顺序,内存解析暂有疑问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新手学java2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值