黑马程序员 学习日记(三)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

内部类

        对于类和对象的概念已经在脑海里逐渐形成。今天又接触到一个新鲜的词——内部类!初学者很容易对此概念印象模糊,搞不懂这究竟是什么,它的存在意义又是什么,如何应用呢?带着这些问题慢慢解析给大家。还是那句话,互相学习互相进步!————部分内容来源网络收集。

1.什么是内部类?

说的不如看的,直接看代码来区别内部类。

普通类

class Person
{
    String name ;
}


内部类

class Person
{
    String name ;
    class Heart
    {
        System.out.println("this heart belong with " + name) ;
    }
}
通过以上代码可以很直观的认识到,人是一个类,但人身体里还有心脏,当需要心脏类的时候可以直接在‘人’类的内部建立一个‘心脏’类,这样我们就得到了一个内部类。内部类是写在一个类(外部类)的里面,内部类可以直接调用外部类的属性,这就是内部类的最大优点!

我们可以在没有得到外部类的实例的情况下,通过内部类去使用外部类的属性。


无论外部类继承实现了什么,都不影响内部类的继承,这就实现了多重继承,这是内部类的另一个好处。


2.详细的去认识内部类。

内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。他们都有什么特点呢?且听我一一道来!

<1>成员内部类

属于外部类的一个成员,与变量和方法同一级别。即上面第一个例子所展示的形式。比较简单。

<2>局部内部类

把内部类放到方法里面,就成了局部内部类。

class Person
{
    String name ;
    
    public void sport()
    {
        class Heart
        {
            long power ;
        }
    }
}

<3>静态内部类

在成员内部类的基础上,在class前加上static修饰,使内部类静态化。静态化后只能访问外部类的静态变量,有局限性。但是因为静态化了,在new对象时可以直接Person.Heart,通过static找到,而不需要先有Person对象。

class Person
{
	static String name ;

	static class Heart
	{
		public void toString()
		{
			System.out.println(name) ;
		}
	}
}

public class Demo
{
	public static void main(String args[])
	{
		Person.Heart h = new Person.Heart() ;
		h.toString() ;
	}
}

<4>匿名内部类

匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:

必须继承一个父类或实现一个接口

在使用匿名内部类时,要记住以下几个原则:
  ·匿名内部类不能有构造方法。 
  ·匿名内部类不能定义任何静态成员、方法和类。 
  ·匿名内部类不能是public,protected,private,static。 
  ·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 
  ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 

abstract class Person {
    public abstract void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}


对于内部类的研究暂时就到这里

更深入的研究还请大家自行实施吧,我已经把我所能理解的东西都写了出来,如果有大神路过看到还请多多包涵,小弟实在能力有限。

互相学习互相进步!!


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值