怕什么真理无穷

导航

关于抽象类和接口的简单理解

//抽象类或方法的特征:用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接口
*/

 

posted on 2021-01-30 22:16  惭愧书生  阅读(120)  评论(0编辑  收藏  举报