类、抽象类与接口

2019-02-16  本文已影响0人  夜阑w

一、抽象类

如果在两个类当中有同名的方法,按照正常道理来说,应该提取到父类里,但是这个两个方法又有明显的方法实现上的不同,那么在父类里的方法,就应该定义成为抽象方法,它只给出了方法的样子,而不给出方法的具体实现,具体实现由继承这个类的具体的子类去实现。

抽象方法是一种特殊的方法,它只有声明,而没有具体的实现,用abstract关键字修饰。包含抽象方法的类称为抽象类,并且也用abstract修饰。但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。抽象方法,必须在抽象类里,但抽象类里不一定有抽象方法。

public abstract class Animal {
    public abstract void eat();
}

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cat is eating fish.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.eat(); 
        /*输出结果
        Cat is eating fish.*/
    }
}
1、抽象类和普通类的区别
2、与重写的区别

二、接口

接口是一种声明的集合,是一种声明的规范,里面包含了很多抽象方法。

接口可以被其他类实现,用interface来声明。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。接口无法被实例化,但是可以被实现,用implement来实现。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口中定义的属性和方法的默认访问级别都是public,所有的方法前都默认包含了abstract ,表明它是一个抽象方法,但是可以省略,而且默认是省略的。

接口可以看成是一种特殊的“抽象类”,接口可以继承接口,也只可以继承接口。但是接口不可以实现接口。一个类可以实现多个接口使用关键字implements ,一个接口可以继承多个接口使用关键字extends,一个类可以同时继承一个别的类,而且实现一个或多个接口,但是关键字extends要在前。

public interface AnimalInterface {
    void eat();
}

public class Cat implements AnimalInterface {
    @Override
    public void eat() {
        System.out.println("Cat is eating fish.");
    }
}

public class Main {
    public static void main(String[] args) {
        AnimalInterface cat = new Cat();
        cat.eat(); 
        /*输出结果
        Cat is eating fish.*/
    }
}
接口与抽象类的区别
上一篇下一篇

猜你喜欢

热点阅读