接口是一个抽象类还要抽象的类
在讲授接口之前,抽象类是绕不外去的一个观念,接口可以以为是一个比抽象类还要抽象的类。 什么是抽象类?「包括一个或多个抽象要领的类就是抽象类,抽象要领即没有要领体的要领」,抽象要领和抽象类都必需声明为 abstract。譬喻: // 抽象类 public abstract class Person { // 抽象要领 public abstract String getDescription(); } 牢记!「除了抽象要领之外,抽象类还可以包括详细数据和详细要领」。譬喻, 抽象类 Person 还生涯着姓名和一个返回姓名的详细要领: public abstract class Person{ private String name; public Person(String name){ this.name = name ; } public abstract String getDescription(); public String getName(){ return name; } } ❝ 很多措施员城市「错误」的以为,在抽象类中不能包括详细要领。其拭魅这也是接口和抽象类的差异之处,接口中是不能包括详细要领的。 ❞ 「抽象类不能被实例化」。也就是说,假如将一个类声明为 abstract, 就不能建设这个类的工具。 new Person("Jack"); // Error 可以界说一个抽象类的工具变量, 可是它只能引用非抽象子类的工具。假设 Student 类是 Person 的非抽象子类: Person p = new Student("Jack"); // Right 所谓非抽象子类就是说,假如建设一个担任抽象类的子类并为之建设工具,那么就「必需为父类的全部抽象要领提供要领界说」。假如不这么做(可以选择不做),子类如故是一个抽象类,编译器会逼迫我们为新类加上 abstract 要害字。 下面界说扩展抽象类 Person 的详细子类 Student: public class Student extends Person { private String major; public Student(String name, String major) { super(name); this.major = major; } @Override public String getDescription(){ // 实现父类抽象要领 return "a student majoring in " + major; } } 在 Student 类中实现了父类中的抽象要领 getDescription 。因此,「在 Student类中的所有要领都长短抽象的, 这个类不再是抽象类」。 挪用如下: Person p = new Student("Jack","Computer Science"); p.getDescription(); 因为不能结构抽象类 Person的工具, 以是变量 p 永久不会引用 Person 工具, 而是引用诸如 Student这样的详细子类工具, 而这些工具中都重写了 getDescription要领。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |