Object类
1.概念
Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object类
例如我们定义一个类:
public class Person{}
//其实它被使用是这样的
public class Person extends Object{}
2.Object的多态
使用Object可以接收任意的引用数据类型
3.toString
建议重写Object中的toString方法。方法的作用:返回对象的字符串表达式,Object的toString的方法,返回对象的内存地址。
4.equals
建议重写equals方法,此方法的作用:指示某个其他对象是否等于此对象,Obect的equals方法:实现了对象最具区别的可能等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用统一对象(x==y具有值true)s时,此方法返回true。
equals
方法重写时的五个特性:
自反性 :对于任何非空的参考值
x
,
x.equals(x)
应该返回
true
。
对称性 :对于任何非空引用值
x
和
y
,
x.equals(y)
应该返回
true
当且仅当
y.equals(x)
回报
true
。
传递性 :对于任何非空引用值
x
,
y
和
z
,如果
x.equals(y)
回报
true
个
y.equals(z)
回报
true
,然后
x.equals(z)
应该返回
true
。
一致性 :对于任何非空引用值
x
和
y
,多次调用
x.equals(y)
始终返回
true
或始终返回
false
,前提是未修改对象
上的
equals
比较中使用的信息。
非空性 :对于任何非空的参考值
x
,
x.equals(null)
应该返回
false
内部类
1.概念
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
广泛意义上的内部类一般来说包括这四种:
1
、成员内部类
2
、局部内部类
3
、匿名内部类
4
、静态内部类
2.成员内部类
class Outer {
private double x = 0;
public Outer(double x) {
this.x = x;
}
class Inner { //内部类
public void say() {
System.out.println("x="+x); } } }
特点: 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括
private
成员和静态成员)。
不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问 的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访
问:
外部类
.
this
.
成员变量
外部类
.
this
.
成员方法
外部使用成员内部类
Outter outter
=
new
Outter
();
Outter
.
Inner inner
=
outter
.
new
Inner
();
3.局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或 者该作用域内。
注意
:
局部内部类就像是方法里面的一个局部变量一样,是不能有
public
、
protected
、
private
以及
static
修饰符的。
class Person{ public Person() { } }
class Man{
public Man(){ }
public People getPerson(){
class Student extends People{ //局部内部类
int age =0; }return new Student(); } }
4.匿名内部类
匿名内部类由于没有名字,所以它的创建方式有点儿奇怪。创建格式如下:
new
父类构造器(参数列表)
|
实现接口()
{
//
匿名内部类的类体部分
}
在这里我们看到使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一
个接口。同时它也是没有
class
关键字,这是因为匿名内部类是直接使用
new
来生成一个对象的引用。当然这个引用是隐
式的。
在使用匿名内部类的过程中,我们需要注意如下几点:
1
、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或 者实现一个接口。
2
、匿名内部类中是不能定义构造函数的。
3
、匿名内部类中不能存在任何的静态成员变量和静态方法。
4
、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5
、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
6
、只能访问
final
型的局部变量
5.静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字
static
。
静态内部类是不需要依赖于外部类对象的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非
static
成员 变量或者方法。
public class Test {
public static void main(String[] args) {
Outter.Inner inner = new Outter.Inner();
}
}class Outter {
public Outter() { }
static class Inner { public Inner() { } } }