@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关键字之前。先继承,再实现。