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();
}
记录一下。。。