黑马程序员——抽象类, 接口, Object类

------- android培训java培训、期待与您交流! ----------

 

抽象类, 接口, Object

 

抽象类

1.      前面用abstract关键字修饰的类是抽象类,前面用abstract关键字修饰的方法叫抽象方法

格式:

1)      抽象类:  abstract ClassName {}

2)      抽象方法:  abstract返回值类型methidName([参数]) {}

2.      抽象类与抽象方法的特点

1)      抽象类不能被实例化,不能被new出一个新对象

2)      抽象类只能被子类继承

3)      抽象类可以包含抽象方法,也可以包含实例方法, 抽象方法存在的类必须是抽象类

4)      抽象方法在子类中必须重写

注意: 抽象方法在子类中必须重写

3.      抽象类没有抽象属性这个概念,可以有成员属性

4.      抽象类中存在构造方法,用来帮助子类实例化

5.      抽象类可以继承抽象类,子类可以对方法选择性重写

6.      抽象类可以继承普通类

7.      abstract关键字

1)      abstract不能与final共存,因为final修饰的类是不能被继承的, final修饰的方法不能被重写,为抽象类只能被继承, 抽象方法必须被实现类重写

2)      abstract不能与static共存,静态方法是优先于对象存在的,抽象方法没有方法实现,是不能被直接调用的

3)      abstract关键字不能与private共存, private修饰的方法是只能在类内部使用的,抽象方法没有功能实现

注意: 抽象类内的静态实例方法可以通过类名.方法调用,抽象类没有自己的实体, 所以不能创建自己的对象调用方法

8.      模板方法模式

在开发过程中经常要求几个方法的执行顺序,可以通过在抽象类中定义一个模板方法来规定方法的执行顺序

例如:

abstract class ConnectionDb {

abstract voidclose();       //关闭数据库连接的方法

abstract void operation();        //操作数据库的方法

abstract voidconnection();      //连接数据库的方法

void run() {        //模板方法用来规定方法调用顺序

           connection();

           operation();

           close();

}

}

 

代码示例:

定义了一个抽象类, 定义了抽象方法和模板方法,分别有两个类继承了这个抽象类

 

class CarMode {
	public static void main(String[] args) {
		// 父类引用指向子类对象
		Mode h1 = new H1();
		Mode h2 = new H2();
		h1.run();
		h2.run();
	}
}

abstract class Mode {
	abstract void fire();

	abstract void drive();

	abstract void stop();

	// 定义执行顺序的模板方法
	void run() {
		fire();
		drive();
		stop();
	}
}

// 定义一个H1类继承模板的抽象类
class H1 extends Mode {
	// 重写抽象类中的方法
	public void fire() {
		System.out.println("H1点火......");
	}

	public void drive() {
		System.out.println("H1行驶......");
	}

	public void stop() {
		System.out.println("H1停止");
	}
}

// 定义一个H2类继承模板的抽象类
class H2 extends Mode {
	// 重写抽象类中的方法
	public void drive() {
		System.out.println("H2行驶......");
	}

	public void stop() {
		System.out.println("H2停止");
	}

	public void fire() {
		System.out.println("H2点火......");
	}
}


 

接口

1.      接口的声明与类的声明一致,知识将表示类的class 类名 {}换成表示接口的interface接口名 {}

2.      接口的组成

1)      成员都是用public修饰的

2)      属性默认都是public static final修饰

3)      方法默认是public abstract修饰

3.      接口作用

1)      一个类可以实现多个接口

2)      接口用来分解代码的耦合度

4.      Implements关键字

一个类要实现接口的话在声明类的时候在类名后面加implements加接口名

例如 public class ClassName implements IntefaceName

5.      接口的特点

1)      接口是对外暴露的规则,接口中定义的方法全是抽象方法, 实现接口的类必须实现接口中的全部方法

2)      接口中定义的功能帮助实现类扩展了功能

3)      用来分解代码的耦合度

4)      一个类可以实现多个接口

6.      接口的两种概念

1)      Java中的接口inteface

2)      某种语言实现的程序对外提供的公共的标准

 

代码示例

代码使用了策略设计模式

/*
电脑主板安装PCI的策略
 */

class PCITest {
	public static void main(String[] args) {
		// 创建一个主板的对象
		PrimaryPanel p = new PrimaryPanel();
		// 选择一个策略, 接口引用指向实现类的对象
		PCI pci = new SoundCardImpl();
		// 执行安装
		p.run(pci);

		pci = new ViewCardImpl();
		p.run(pci);

		pci = new NetCardImpl();
		p.run(pci);
	}
}

// 定义一个主板类
class PrimaryPanel {
	// 定义一个安装PCI设备的方法
	void run(PCI p) {
		p.setUp();
	}
}

// 定义一个接口封装PCI设备公共的功能
interface PCI {
	// 安装到主板的方法
	void setUp();
}

// 定义声卡类
class SoundCardImpl implements PCI {
	// 实现接口中的功能
	public void setUp() {
		System.out.println("安装声卡");
	}
}

// 定义显卡类
class ViewCardImpl implements PCI {
	// 实现接口中的功能
	public void setUp() {
		System.out.println("安装显卡");
	}
}

// 定义网卡类
class NetCardImpl implements PCI {
	// 实现接口中的方法
	public void setUp() {
		System.out.println("安装网卡");
	}
}


 

抽象类和接口的区别

1.      抽象类只能被单继承

接口可以被多实现

2.      抽象类描述的是跟实现类是所属关系,描述的是基本的工呢过

接口描述的是实现类的扩展的工呢过

3.      抽象类中可以有抽象方法,实例方法

接口中全是抽象方法

 

Object

1.      Object类是所有类的根类,所有的类, 包括自定义的类,都默认继承了Object, Object类中的方法所有的类都有

2.      Object类中了解的方法

1)      protected Object clone()

返回一个当前对象的副本

2)      protected void finalize()

垃圾回收的方法

3)      Class getClass()

返回当前对象的Class

3.      Object类中重点的方法

1)      public String toString()

返回对象的字符串化表现形式, 打印对象时默认调用的就是这个方法, Object类中定义的返回值是当前对象的包名.类名@hashCode(),创建一个类需要重写这个方法

2)      public boolean equals(Objectobj)

返回一个布尔值, 用于比较两个对象是否相等, Object类中定义的返回值是比较两个对象的地址(object1 == object2),通常重写这个方法比较类中的两个属性, 例如String类重写了这个方法,比较的是两个字符串的内容是否相等

3)      public int hashCode()

返回当前对象对应的哈希码值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值