Object
概述
Object:Java语言中上帝。所有类的父类。其中定义了所有对象都具备的功能。
Object-equals方法
文档中的Obeject方法
public boolen equals(Object obj){
return (this==obj);
}
举例
class Person extends Object {
// private int age;
}
class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person();
Person p2=new Person();
Person p3=p1;
System.out.println(p1.equals(p2));
System.out.println(p1==p3);
}
}
结果
false
true
如何让System.out.println(p1.equals(p2));结果为true
class Person extends Object {
private int age;
private String name;
Person(String name,int age){
this.name=name;
this.age=age;
}
//定义一个方法,判断两个Person对象是否是同一个。判断的依据是根据年龄。
//如果年龄相同,视为同一个人。
/*
* 不用再定义方法,判断对象是否相同,因为Object父类中,已经定义了这样的方法。
* 直接使用就可以了。但是判断的内容是不是根据Person的特点定义的。
* 需要保留父类的功能声明,定义子类功能的特有功能。
* 使用覆盖。
*/
public boolean equals(Object obj) {//Object obj=p2;-->Object obj=new Person();
//提高点效率。如果两个引用指向的同一个对象,不用再转换并比较内容了。直接判断地址就行。
if(this==obj)
return true;
//obj.age是错误的。因为Object中没有age属性。
//想要使用子类对象的特有属性或者行为,必须对其进行向下转型。
//需要进行类型判断。
if(!(obj instanceof Person))
return false;//throw new ClassCastException(\"类型错误\");
Person p=(Person)obj;
//如果判断姓名字符串是否相同。不要用==。字符串本身是一个对象。
//return this.name==p.name&&this.age==p.age;
//使用String类的equals方法判断。
return this.name.equals(p.name)&&this.age==p.age;
}
//建立Person对象特有的字符串表现形式。只要覆盖toString方法即可。
public String toString()
{
return \"Person[name=\"+this.name+\",age=\"+this.age+\"]\";
}
}
class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person(\"lisi\",21);
Person p2=new Person(”lisi“,22);
System.out.println(p1.equals(p2));//判断的是对象的内容。用equals.
System.out.println(p1==p2);//判断的是对象的地址
System.out.println(p1);
}
}
结果
false
false
Person[name=lisi,age=21]
Object-toString方法
class ObjectDemo {
public static void main(String[] args) {
Person p1=new Person(\"lisi\",21);
Person p2=new Person(”lisi“,22);
System.out.println(p1);//输出的是Person@1afae45,数据类型@哈希值
//其实它自动地调用了toString,相当于System.out.println(p1.toString());
}
}
内部类
概述
将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
访问特点:
内部类可以直接访问外部类中的成员,包括私有成员。
而外部类要访问内部类中的成员必须要建立内部类的对象。
A类要直接访问B类中的成员时,可以将A类定义到B类中。作为B类的内部类存在。
class Outer{
int num=4;
}
class Inner
{
void show() {
System.out.println(new Outer().num);
}
}
改为
class Outer{
int num=4;
class Inner//非静态内部类。//相当于外部类中的一个成员。它就可以被成员修饰符所修饰。public private static
{
void show() {
System.out.println(num);
}
}
public void method()
{
Inner in=new Inner();
in.show();
}
}
class InnerClassDemo {
public static void main(String[] args) {
//Outer out=new Outer();
//out.method();
//如果内部类权限是非私有的。就可以在外部其他程序中的被访问到。
//就可以通过创建外部类对象完成。
Outer.Inner in=new Outer().new Inner();
in.show();
}
}
以上是非静态非私有的访问方式
访问格式-静态内部类
class Outer{
int num=4;
static class Inner2//静态内部类。相当于一个外部类
{
void show2() {
System.out.println(\"show2...\"+num);
}
}
public void method()
{
Inner in=new Inner();
in.show();
}
}
class InnerClassDemo {
public static void main(String[] args) {
Outer.Inner2 in=new Outer.Inner2();
in.show2();
}
}
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

