抽象类或方法的特征:用abstract修饰、无方法体。接口interface,接口中的方法都是抽象的,不能实例化对象,需要通过implements实现。接口和类一样,可以继承,不同的是可继承多个,且可将继承和实现简写在一起
//抽象类或方法的特征:用abstract修饰、无方法体
abstract class Animal{
abstract void shout();//抽象类、抽象方法存在的意义:例如动物的叫声各种各样,我也说不准,但可以先说明这是动物的叫声
}
class Dog extends Animal{
void shout(){
System.out.println("Wang wang……");//被继承后,现在实现抽象类,动物的叫声就是Wang wang……
}
}
public class Example17{
public static void main(String[] args){
Dog dog =new Dog();
dog.shout();//调用的是实现类中的方法
}
}
//注意:如果用用抽象方法,那类必须是抽象类。但允许抽象类中,不用抽象方法。
//抽象类也不可被实例化,因为抽象类中可能会有抽象方法,而抽象方法是没有方法体的,无法被调用
//如果要调用抽象类中的方法,则需要创建一个子类,在子类中将抽象方法进行实现后才行
//如果一个抽象类中所有方法也都是抽象的,那就可以用接口来定义
interface Animal{//定义Animal接口
int id=1;//在接口中定义的所有变量,默认前面使用了public static final修饰,本行等同于 public static final int id=1
void breathe();//在接口中定义的所有方法,默认前面都使用了public abstract修饰,本行等同于 public abstract void breathe
void run();//同上
}
//抽象方法是不能通过实例化对象来调用的,需要定义一个类并使用implements来实现接口中所有方法
class Dog implements Animal{ //定义一个类,使用了implements来实现Animal接口。注意,当一个类实现接口时,当类是抽象的,可选择实现部分方法,否则要实现所有方法
public void breathe(){
System.out.println("狗在呼吸");//实现了Animal接口中的breathe方法
}
public void run(){
System.out.println("狗在跑");//实现了Animal接口中的run方法,本类非抽象类,因此要实现接口中的所有方法,共2个
}//假若不把void run()也实现了,编译会报错: 错误: Dog不是抽象的, 并且未覆盖Animal中的抽象方法run()
}
public class Example18{
public static void main(String[] args){
Dog dog =new Dog();
dog.breathe();
dog.run();
}
}
//接口也可以通过extends关键字继承
interface Animal{
int id=1;
void breathe();
void run();
}
interface LandAnimal extends Animal{ //接口LandAnimal继承了接口Animal
void liveOnland();//并且在继承的基础上,增加一个抽象方法,如果实现的类不是抽象的,那该方法也必须实现,否则编译报错
}
class Dog implements LandAnimal{//定义一个类来实现继承了Animal的LandAnimal
public void breathe(){
System.out.println("狗在呼吸");
}
public void run(){
System.out.println("狗在跑");
}
public void liveOnland(){
System.out.println("狗喘着气在陆地上跑");//除了实现Animal的方法,还要实现LandAniml继承Animal后增加的方法
}
}
public class Example19{
public static void main(String[] args){
Dog dog =new Dog();
dog.breathe();
dog.run();
dog.liveOnland();
}
}
/**
1.接口中的方法都是抽象的,不能实例化对象
2.当一个类实现接口时,如果这个类是抽象类,可只实现接口中部分方法,否则要实现所有方法
3.通过implements关键实现接口时,可以同时实现多个接口,用","分开,比如implements Run,Fly{}
4.一个接口也中以通过extends关键字继承多个接口,用","隔开,这是与类的继承不同之处。比如interface Eating extends Running,Fly{}
5.一个类在继承另一个类的同时还可以实现接口,要求extends关键字必须在implements之前,先继承,再实现。如class Dog extends Canidae implements Animal{}
表示Dog类继承了Canidae类且实现Animal接口
*/