美文网首页
类、抽象类与接口

类、抽象类与接口

作者: 夜阑w | 来源:发表于2019-02-16 16:47 被阅读0次

    一、抽象类

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

    抽象方法是一种特殊的方法,它只有声明,而没有具体的实现,用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、抽象类和普通类的区别
    • 抽象方法必须为public或者protected,缺省情况下默认为public。
    • 抽象类不能被直接实例化,即不能用来创建对象:抽象类创建对象其实没有任何意义。
    • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
    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.*/
        }
    }
    
    接口与抽象类的区别
    • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。接口可以继承别的多个接口,组成一个新的接口。
    • 接口是一个100%的抽象类,里面的方法没有任何一个有任何的实现;抽象类可以包含非抽象的方法,也就是说可以给出某一些方法的实现。
    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的,即只能为常量。
    • 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
    • 接口一般处于代码的最底层,作出一些规定,而接口之上一层抽象类层,对接口进行第一次的实现,把不可能一次完成的方法,交由自己的子类来实现。

    相关文章

      网友评论

          本文标题:类、抽象类与接口

          本文链接:https://www.haomeiwen.com/subject/kdvgeqtx.html