天天看点

Java类的扩展

1、Object类

Object类:Java中所有类的公共父类,如果一个类未明确地继承其他类则一定是Object的子类。

Object类的主要方法
方法名称 类型 描述
public Object() 构造 构造方法
public boolean equals(Object obj) 普通 对象比较
public int hashCode() 普通 取得hash码
public String toString 普通 对象打印时调用

equals()方法默认比较的是地址,toString()方法默认打印的是对象地址。平常使用这两种方法时为方便开发会覆写这两种方法。

public class ObjectDemo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo01 d1=new Demo01();
		System.out.println(d1);
		System.out.println(d1.toString());	//调用Object原有的toString()
		Demo02 d2=new Demo02("张三");
		System.out.println(d2.toString());	//调用被覆写的toString()
	}

}
class Demo01{}
class Demo02{
	private String name;
	public Demo02(String name) {
		this.setName(name);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String toString() {	//覆写Object的toString()
		return "姓名是:"+this.getName();
	}
}
//[email protected]
//[email protected]
//姓名是:张三
           

对象在输出时一定会调用Object类的toString()打印内容,因此可以通过toString()取得对象的信息。——为取得对象具体的信息就需调用被自己覆写的toString()。

2、内部类的扩展

在一个抽象类中可以定义多个抽象类或接口,在一个接口中也可以定义多个接口或抽象类。

在抽象类中可以定义多个内部抽象类,在接口中可以定义多个内部接口。

public class InnerExtDemo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A.B b=new X().new Y();	//实例化内部接口对象
		b.printB();	//调用内部接口的抽象方法
	}

}
abstract class A{
	abstract void printA();
	interface B{	//定义内部接口
		abstract void printB();
	}
}
class X extends A{
	public void printA() {
		System.out.println("抽象类中的抽象方法");
	}
	class Y implements B{	//定义内部类实习内部接口
		public void printB() {
			System.out.println("接口中的抽象方法");
		}
	}
}
//结果
//接口中的抽象方法
           
区别点 抽象类 接口
定义 包含一个抽象方法的类 包含全局常量和抽象方法的集合
组成 构造方法、抽象方法、普通方法、常量、变量 抽象方法、全局常量
使用 子类继承抽象类(extends) 子类实现接口(implements)
特殊点或关系 抽象类可以包含或实现多个接口 接口可以包含多个抽象类但不能继承抽象类,但能继承多个接口
常见设计模式 模板设计 工厂设计、代理设计
对象 都通过对象的多态产生实例化对象
局限 抽象类有单继承的局限 接口无此局限
实际 作为一个模板 作为一个标准或表示一种能力
选择 如果抽象类和接口都能使用,优先选择接口(避免单继承的局限)

3、匿名内部类

定义:没有具体名称的类。

作用:可利用内部类创建不具有名称的对象,并利用它访问类中的成员。

常见的应用:避免接口实现类使用次数太少而去单独定义一个类。

public class NoInnerClassDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new X().fun2();
	}

}
interface A{
	abstract void print();
}

class X{
	public void fun1(A a) {	//方便接受接口的实例化对象
		a.print();			//调用接口方法
	}
	//1、实例化接口对象
	//new A(){}	//接口本身不能直接实例化,使用{}方法在实例化后实现接口抽象方法
	//2、实现接口方法
	//new A(){
	//    **********
	//  }
	public void fun2() {	
		this.fun1(new A() {	//匿名内部类
			public void print() {	//实现接口的方法
				System.out.println("实现接口抽象方法");
			}
		});
	}
}
//结果:
//实现接口抽象方法