抽象类和接口

1、抽象类

当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现时无法确定的,例如定义一个Animal类,其中shout()方法用于表示动物的叫声,但针对不同的动物,叫声是不同的,因此在shout()方法中无法准确描述动物的叫声。

针对上面的情况,Java中允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰。含有抽象方法的类也必须使用abstract关键字来修饰,这个类为抽象类。

①抽象类是不可以被实例化的,因为抽象类中可能包含抽象方法,抽象方法没有方法体,不可以被调用。

如果想调用抽象类中的定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。如下面代码:

// 定义抽象类Animal
abstract class Animal { 
     // 定义抽象方法shout()
	abstract void shout(); 
}
// 定义Dog类继承抽象类Animal
class Dog extends Animal {
     // 实现抽象方法shout()
	void shout() {
		System.out.println("汪汪……");
	}
}

public class Example10 {
	public static void main(String[] args) {
		Dog dog = new Dog(); // 创建Dog类的实例对象
		dog.shout(); // 调用dog对象是的shout()方法
	}
}


2、接口

如果一个抽象类中的所有方法都是抽象的,则这个类可以用另外一种方式来定义,即接口。

接口和抽象类一样,是不可以被实例化的,因为抽象方法没有方法体,不可以被调用。

①如果想调用接口中的定义的方法,则需要创建一个类,并使用implements关键字实现接口中所有的方法。如下面代码:

interface Animal {
	int ID = 1;       // 定义全局常量
	void breathe();  // 定义抽象方法breathe()
	void run();      // 定义抽象方法run()
}

// Dog类实现了Animal接口
class Dog implements Animal {
	//实现breathe()方法
	public void breathe() {
		System.out.println("狗在呼吸");
	}
	//实现run()方法
	public void run() {
		System.out.println("狗在跑");
	} 
}
// 定义测试类
public class Example11 {
	public static void main(String args[]) {
		Dog dog = new Dog(); //创建Dog类的实例对象
		dog.breathe();        //调用Dog类的breathe()方法
		dog.run();             //调用Dog类的run()方法
	}
}

②当一个类实现接口时,如果这个类是抽象类,可以只实现接口中的部分方法即可,否则需要实现接口中的所有方法。

③接口也可以继承。(可以定义一个接口使用extends关键字去继承另外一个接口)如下面代码

interface Animal {
	int ID = 1;       // 定义全局常量
	void breathe();  // 定义抽象方法breathe()
	void run();       // 定义抽象方法run()
}
// 定义了LandAnimal接口,并继承了Animal接口
interface LandAnimal extends Animal { // 接口继承接口
	void liveOnland();                   // 定义抽象方法liveOnLand()
}
// 定义Dog类实现Animal接口
class Dog implements LandAnimal {
	//实现breathe()方法
	public void breathe() {
		System.out.println("狗在呼吸");
	}
	//实现run()方法
	public void run() {
		System.out.println("狗在跑");
	}
     // 实现liveOnLand()方法
	public void liveOnland() {
		// TODO Auto-generated method stub
		System.out.println("狗生活在陆地上");
	} 
}
// 定义测试类
public class Example12 {
	public static void main(String args[]) {
		Dog dog = new Dog(); // 创建Dog类的实例对象
		dog.breathe();        // 调用Dog类的breathe()方法
		dog.run();             // 调用Dog类的run()方法
		dog.liveOnland();    // 调用Dog类的liveOnland()方法
	}
}

④一个类在继承另外一个类时还可以实现接口,此时,extends关键字必须位于implements关键字之前。

class Dog extends lei1 implements Animal {
	......
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值