加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

接口是一个抽象类还要抽象的类

发布时间:2021-05-18 02:15:27 所属栏目:编程 来源:互联网
导读:在讲授接口之前,抽象类是绕不外去的一个观念,接口可以以为是一个比抽象类还要抽象的类。 什么是抽象类?「包括一个或多个抽象要领的类就是抽象类,抽象要领即

在讲授接口之前,抽象类是绕不外去的一个观念,接口可以以为是一个比抽象类还要抽象的类。

什么是抽象类?「包括一个或多个抽象要领的类就是抽象类,抽象要领即没有要领体的要领」,抽象要领和抽象类都必需声明为 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要领。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读