抽象类和接口

@Java入门基础
抽象类和接口
1.抽象类
当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现是无法确定的。
在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。
Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰。

abstract void shout(); //定义抽象方法shout();

在定义抽象方法时需注意:

  • 抽象方法所在类必须是抽象类,但抽象类中可包含抽象方法;
  • 抽象类不可以被实例化
  • 抽象类必须由子类实现其抽象方法

下面通过一个例子实现抽象类中的方法:
Example1:

abstract class Animal{
	//定义抽象方法shout()
	abstract void shout();
}
//定义Dog类继承抽象类Animal
class Dog extends Animal{
	//实现抽象方法shout()
	void shout() {
		System.out .println("汪汪......");
	}
}
//定义测试类
public class EXample1 {
	public static void main(String[] args) {
		Dog dog = new Dog();//创建Dog类的实例对象
        dog.shout();//调用dog对象的shout()方法
	}
}

2.接口
如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方法来定义,即接口;在定义接口时,需要使用interface关键字来声明。
注意:

  • 接口不能实例化
  • 接口由其子类来实现其所有的抽象方法并实例化
  • 类名 +implement + 接口名

Example2:
类与接口之间的实现关系

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

从例子中发现抽象方法并没有使用abstract关键字来修饰,这是因为接口中定义的方法和变量都包含一些默认修饰符;接口中定义的方法默认使用public abstract 来修饰,即抽象方法。接口中的变量默认用public static final 来修饰,即全局常量;
Example3:
接口与接口间的实现关系

interface Animal{
	void breathe();
	void run();
}
interface LandAnimal extends Animal{//接口继承接口
	void liveOnland();
}
//定义Dog类继承抽象类Animal
class Dog implements Animal{
	//实现抽象方法breathe()
	public void breathe() {
		System.out .println("狗在呼吸");
	}
	//实现抽象方法run()
	public void run() {
		System.out .println("狗在跑");
	}
	public void liveOnland() {
		System.out.println("狗生活在陆地上");
	}
}
//定义测试类
public class Example3 {
	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关键字用法区别

  • 表达继承的意思的时候用extends关键字 如:类名 + extends + 类名 ; 接口名 + extends + 接口名;
  • 表达实现的的意思时用implements关键字 如: 类实现接口 类名+ implements + 接口名;

接口特点归纳:

  • 接口中的方法都是抽象的,不能实例化对象
  • 当一个类实现接口时,如果这个类时抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。
  • 一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开;
  • 一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。
  • 一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。先继承,再实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值