类的内部成员之五:内部类

内部类介绍:

类的内部成员之五:内部类

  1. JAVA中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类;

  2. 内部类的分类:成员内部类(静态、非静态) and 局部内部类(方法内、代码块内、构造器内)

  3. 成员内部类:

    一方面,作为外部类的成员

    • 调用外部类的结构;
    • 可以被static 修饰
    • 可以被4种不同的权限修饰

    另一方面,作为一个类

    • 类内可以定义属性、方法、构造器
    • 可以被final修饰,表示此类不能被继承。言外之意,不使用final就可以被继承
    • 可以被abstract修饰
  4. 关注如下的 3个问题

​ 4.1 如何实例化成员内部类的对象

​ 4.2 如何在成员内部类中区分调用外 部类的结构

​ 4.3 开发中局部内部类的使用

package com.myobjectoriented3.nonworking;

public class InnerClassTest {
public static void main(String[] args) {
	//创建对象(static静态的成员内部类的对象)
	Person33.Dog dog=new Person33.Dog();
	dog.show();
	
	//创建对象(动态的成员内部类的对象)
	Person33 p=new Person33();
//	Person33.Bird pBird=p.new Bird();
//	pBird.sing();
//
//	
//	pBird.display("啄木鸟");
//	啄木鸟
//	鸟
//	赵子龙
	
	p.method();
	Person33 p2=new Person33();
	
	
}
}
/*
 * 内部类:成员内部类/局部内部类
 * 
 * 
 * 
 */
class Person33{
	String name="赵子龙";
	int age;
	
	public  void eat() {
		System.out.println("人类可以吃饭");
	}
	
	
		//静态成员内部类
	static class Dog{
		String name="狗子";
		int age;
		public Dog() {
			
		}
		public void show() {
			System.out.println("狗子可以叫");
		}
	}
	
	//动态成员内部类
	class Bird{
		String name="鸟";
		public void sing() {
			System.out.println("鸟儿可以唱歌");
			//Person33.this.eat();
		}
		
		public void display(String name) {
			System.out.println(name);//形参
			System.out.println(this.name);//内部类的名字
			System.out.println(Person33.this.name);//外部类的名字
			
		}
		
		
		
	}
	
	//局部内部类(方法内,代码块内,构造器内)
	public  comparaA getcomparaA(){
		class compara implements comparaA{
			
			public void show() {
				System.out.println("say:A");
			}
		}
		//return new compara();// 方式一
		
		return new compara() {//方式二
			public void show() {
			System.out.println("say:A");
		}};
	}
	
	
	
	{
		class B{
			double length;
			public void getLength() {
				System.out.println("长度是"+length);
			}
		}
	}
	
	
	
	public Person33(){
		class C{
			String classname="计算机科学";
			public void getClassname() {
				System.out.println("课程名字:"+classname);
			}
		}
	}
	
	
	
	
	
}

开发中局部内部类的使用:

package com.myobjectoriented3.nonworking;

public class InnerClassTest1 {

	
	//方式一  :非匿名实现类的匿名对象
	public Comparable getComparable() {
	class myComparable implements Comparable{
			@Override
			public int compareTo(Object o) {
				// TODO Auto-generated method stub
				return 0;
			}
							}
				return new myComparable();
	}
	
	
	//方式二 匿名实现类的匿名对象
	public Comparable getComparable1() {
		return new Comparable() {

			@Override
			public int compareTo(Object o) {
				// TODO Auto-generated method stub
				return 0;
			}
			
		};
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值