1.Object
object类是所有类的根类(父类)。
如果一个类没有显示继承另外一个类,那么该类一定继承于object类。
toString()返回对象字符串的的形式。
public class Test01 {
public static void main(String[] args) {
Object obj = new Object();
// 输出对象时,默认调用toString方法
System.out.println(obj);
// 类型@内存地址
System.out.println(obj.toString()); Student s1 = new Student("二狗",);
System.out.println(s1);
}
}
可以通过代码生成器快速生成toString方法。
equals(object obj)用于判断两个对象是否相等。
==比较两个对象的内存地址或基本数据类型的或char类型比较,object默认equals实现比较内存地址。
equals:用于比较两个对象的内容(属性)是否相等。
当自定义对象时,要比较自定义对象是否相等,就必须通过equals方法比较两个对象属性值是否相等,那就必须重写Object的equals方法
public boolean equals(Object obj) {
if(this == obj) {
return true;
} Student s = (Student) obj;
if(this.sid.equals(s.sid) && this.name.equals(s.name) && this.age == s.age) {
return true;
}else {
return false;
}
}
2.内部类
在java中,一个文件可以定义多个类,但是文件名必须和public类型的类的类名保持一致。
这两个类是平行关系。
在java中,一个类也可以定义在一个类的内部,顾名思义定义在内部的类称为内部类(inter class),定义在外部的类称为外部类(out class)。
形如:
public class Outer { [修饰符] class Inner{ }
}
编译后的结果
内部类根据具体的修饰符和具体位置分为很多情况。
2.1成员内部类
一个内部类作为一个外部类的成员而存在,此时该内部类称为外部类的成员内部类。
public class Outer { class Inner{ }
}
一般而言,内部类都用默认修饰符。
【1】内部类如何创建对象
public class Test01 {
public static void main(String[] args) { // 【1】创建外部类对象
Outer ot = new Outer;
// 【2】创建内部类对象
Inter it = ot.new Inter;
it.showInfo;
}
}
【2】内部类可以访问外部类的私有变量。
public class Outer { private String name = "Outer"; class Inner{ public void showInfo() {
System.out.println(name);
} }
}
【3】特殊情况内部类与外部类同名。
class Inner{ private String name = "Inner"; public void showInfo() {
// String name = "show info"; // 访问外部类的私有成员
System.out.println(this.name); // 访问外部类的私有成员
System.out.println(Outer.this.name); }
}
}
静态内部类
如果一个内部类被static 修饰,我们称为这个类为静态内部类。形式
public class Outer { static class Inter{
}
}
【1】静态内部类创建对象
public class Test01 {
public static void main(String[] args) { // 【1】创建外部类对象
Outer outer = new Outer();
// 【2】创建内部类对象
Inner inner = outer.new Inner();
inner.showInfo();
}
}
【2】内部类中可以访问外部类的私有变量
public class Outer { private String name = "Outer"; class Inner{ public void showInfo() {
System.out.println(name);
} }
}
【3】静态内部类可以访问外部类的(私有)静态成员
特殊情况:避免发生
public class Outer { private static String name = "Outer"; static class Inner{ private static String name = "Outer"; public void showInfo() {
System.out.println("showInfo"); System.out.println(name); System.out.println(Outer.name);
}
}
}
方法内部类
如果一个内部类定义到一个方法中,我们称为方法内部类
public class Outer {
private static int a = ;
public void print() {
int b = ;
class Inner {
public void showInfo() {
System.out.println(b); }
}
Inner inner = new Inner();
inner.showInfo();
} }
【2】方法的局部变量进入方法内部类时,被加上final 修饰。出了方法内部类之后,final被去掉
public class Outer { public void print(int b) { int a = ; class Inner{ public void showInfo() {
System.out.println("show info"); System.out.println("print()->a:"+); // 在方法内部类中不能修改方法的局部变量(final)
// a = 20;
// b = 20;
}
} a = ; Inner inner = new Inner();
inner.showInfo();
}
}
匿名内部类
未来一个类如果只使用一次,我们可以把类声明为匿名类。匿名类一般和内部类结合使用,形成匿名内部类
匿名内部类一定要存在:实现接口