Object和内部类

1: equals

2:内部类


总结:

1:equals

equals是Obejct类的一个方法, 比较两个对象是否相等, 如果有需要可以重写其方法。

	public boolean equals(Object obj) //重写父类的equals方法	
	{
		if (!(obj instanceof Demo))
			return false;
		Demo d = (Demo)obj; //多态的体现
		return this.num == d.num;
	}

如果传入的对象和Demo有继承关系或者相等 那么就转换成Demo 从而可以使用调用Demo的成员 返回这个变量是否相等。

返回的类型是boolean类型的值  相等返回true 反之返回false


2:内部类

1):内部类可以访问外部类的成员和方法 包括私有的

之所以可以访问外部类的成员, 是因为内部类已经持有了外部类的一个引用,该格式为:外部类名.this.外部类成员名

public class InnerDemo
{
    public static void main(String[] args)
    {
         Outer out = new Outer();
		 out.method();
    } 
}
class Outer
{
	private int x = 3;
	void method()
	{
		new Inner().function();
	}
	class Inner
	{
		int x = 5;
		void function()
		{
			  int x = 9;
		     System.out.println("inner:" + Outer.this.x);
                                     /*之所以可以直接访问外部类的成员,是因为内部类中已经持有了外部类的一个引用
                                     该格式为 ——>外部类名.this*/
		}
	}
}

以上面的代码为例子:

System.out.println("inner:" + Outer.this.x);// 运行结果为3

 System.out.println("inner:" + x);//运行结果为9

 System.out.println("inner:" + this.x);//运行结果为5

  /*之所以可以直接访问外部类的成员,是因为内部类中已经持有了外部类的一个引用
     该格式为 ——>外部类名.this*/

3):访问格式:
(1):当内部类定义在外部类的成员位置上,而且是非私有的,那么在外部其他类中,可以直接
建立内部类对象进行访问:
格式:
         外部类名.内部类名 x = new 外部类对象名.内部类对象();
         Outer.Inner x = new Outer().new Inner();
         x.function();

4):当内部类是静态的时候

public class InnerDemo
{
    public static void main(String[] args)
    {
		 new Outer.Inner().function();
		 Outer.Inner in = new Outer.Inner();
		 in.function();
		 Outer.Inner.function();
    } 
}
class Outer
{
	private static int x = 3;
	static class Inner //静态内部类
	{
		static void function()
		{
			  int x = 9;
		     System.out.println("inner:" + x);
		}
	}
}


访问静态内部类中的非静态:
new Outer.Inner().function();
访问静态内部类的静态成员:
Outer.Inner.function();
注意:当内部类中定义了静态成员的话,那么这个内部类必须是静态的! 类比于(抽象类)
还有一点就是:
当外部类中的静态方法访问内部类中的方法时, 这个内部类必须也是静态的!

如下:

class Outer
{
	private static int x = 3;
	static class Inner //静态内部类
	{
		static void function()
		{
			  int x = 9;
		     System.out.println("inner:" + x);
		}
	}
	static class Inner2 //此方法必须是静态的
	{
		void show()
		{
			System.out.println("inner2 show");
		}
	}
	public static void method()
	{
		//Inner.function();
		new Inner2().show();
	}
}

static class Inner2  此方法必须是静态的
然后可以就可以这样进行访问:

public static void method()
{
	new Inner2().show();
}

记录一下。。。


你可能感兴趣的:(Object和内部类)